首页 > 代码库 > BZOJ 1965 AHOI2005 SHUFFLE 洗牌 数论
BZOJ 1965 AHOI2005 SHUFFLE 洗牌 数论
题目大意:给定偶数张牌,问m次洗牌之后第l张牌是多少
x*2^m==l (mod n+1)
x=(n/2+1)^m*l mod n+1
快速幂+快速乘233
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MOD (n+1) using namespace std; typedef unsigned long long ll; long long n,m,l; ll Quick_Multiplication(ll x,ll y) { ll re=0; while(y) { if(y&1) re+=x,re%=MOD; x+=x,x%=MOD;y>>=1; } return re; } ll Quick_Power(ll x,ll y) { ll re=1; while(y) { if(y&1) re=Quick_Multiplication(re,x); x=Quick_Multiplication(x,x);y>>=1; } return re; } int main() { cin>>n>>m>>l; cout<<Quick_Multiplication(Quick_Power(n/2+1,m),l)%MOD<<endl; }
BZOJ 1965 AHOI2005 SHUFFLE 洗牌 数论
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。