从图中可以看出经过一次洗牌,序列1 2 3 4 5 6变为4 1 5 2 6 3。当然,再对得到的序列进行一次洗牌,又会变为2 4 6 1 3 5。 游戏是这样的,如果给定长度为N的一叠扑克牌,并且牌面大小从1开始连续增加到N(不考虑花色),对这样的一叠扑克牌,进行M次洗牌。最先说出经过洗牌后的扑克牌序列中第L张扑克牌的牌面大小是多少的科学家得胜。小联想赢取游戏的胜利,你能帮助他吗?Day1
题解:快速幂
其实是道规律题啦。
一次洗牌之后位置x会变换到位置2*x%(n+1)
所以x*(2^m)=L (mod n+1)
2是偶数,n+1是奇数,所以两者一定互质,2^m也一定与n+1互质。
我们其实只需要知道2在模n+1意义下的的逆元,2*x+(n+1)*y=1 x的最小正整数解就是当y=-1时,x=n/2+1
所以这道题的答案就是(n/2+1)^m*L %(n+1)
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define LL long long using namespace std;LL n,m,l;LL quickpow(LL num,LL x,LL p){ LL base=num%p; LL ans=1; while (x) { if (x&1) ans=ans*base%p; x>>=1; base=base*base%p; } return ans;}int main(){ cin>>n>>m>>l; PRintf("%I64d/n",quickpow(n/2+1,m,n+1)*l%(n+1));}
新闻热点
疑难解答