zoukankan      html  css  js  c++  java
  • bzoj1965 [Ahoi2005]SHUFFLE 洗牌

    Description

    为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动。 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打发长途旅行中的无聊时间。玩了几局之后,大家觉得单纯玩扑克牌对于像他们这样的高智商人才来说太简单了。有人提出了扑克牌的一种新的玩法。 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取下面一叠的第一张作为新的一叠的第一张,然后取上面一叠的第一张作为新的一叠的第二张,再取下面一叠的第二张作为新的一叠的第三张……如此交替直到所有的牌取完。 如果对一叠6张的扑克牌1 2 3 4 5 6,进行一次洗牌的过程如下图所示:
      
    从图中可以看出经过一次洗牌,序列1 2 3 4 5 6变为4 1 5 2 6 3。当然,再对得到的序列进行一次洗牌,又会变为2 4 6 1 3 5。 游戏是这样的,如果给定长度为N的一叠扑克牌,并且牌面大小从1开始连续增加到N(不考虑花色),对这样的一叠扑克牌,进行M次洗牌。最先说出经过洗牌后的扑克牌序列中第L张扑克牌的牌面大小是多少的科学家得胜。小联想赢取游戏的胜利,你能帮助他吗?

    Input

    有三个用空格间隔的整数,分别表示N,M,L (其中0< N ≤ 10 ^ 10 ,0 ≤ M ≤ 10^ 10,且N为偶数)。

    Output

    单行输出指定的扑克牌的牌面大小。

    Sample Input

    6 2 3

    Sample Output

    6
     
    这道题好烦啊
    而且是极其恶心的找完规律上逆元
    首先仔细观察题目的变换条件,可以发现从第一张牌跑到第二张牌那里去了,第二张牌又变成第四张牌,然后它就变成这样:1->2->4->8->16……
    如果n没有那么大,仔细观察就会发现每一位其实就是对n+1取模完的结果
    比如n=6,就是1->2->4->1->2->4
    比如n=10,就是1->2->4->8->5->10->9->7->3->6->1
    然后问题变成求(2^m*x)≡L(mod n+1)的x
    然后2在mod n+1意义下逆元是n/2+1
    于是(n/2+1)^m*x≡L(mod n+1)
    移项得x≡(n/2+1)^m*L(mod n+1)
    然后就是快速幂搞搞完了
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<deque>
    #include<set>
    #include<map>
    #include<ctime>
    #define LL long long
    #define inf 0x7ffffff
    #define mod (LL)(n+1LL)
    using namespace std;
    inline LL read()
    {
        LL x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    LL n,m,l,ans;
    inline LL quickpow(LL a,LL b)
    {
    	LL m=a,s=1ll;
    	while (b)
    	{
    		if (b&1)s=(s*m)%mod;
    		m=(m*m)%mod;
    		b>>=1;
    	}
    	return s;
    }
    int main()
    {
    	n=read();m=read();l=read();
    	ans=quickpow((LL)n/2+1,m);
    	ans=(ans*l)%mod;
    	printf("%lld
    ",ans);
    }
    

     

    ——by zhber,转载请注明来源
  • 相关阅读:
    PAT 1097. Deduplication on a Linked List (链表)
    PAT 1096. Consecutive Factors
    PAT 1095. Cars on Campus
    PAT 1094. The Largest Generation (层级遍历)
    PAT 1093. Count PAT's
    PAT 1092. To Buy or Not to Buy
    PAT 1091. Acute Stroke (bfs)
    CSS:word-wrap/overflow/transition
    node-webkit中的requirejs报错问题:path must be a string error in Require.js
    script加载之defer和async
  • 原文地址:https://www.cnblogs.com/zhber/p/4215799.html
Copyright © 2011-2022 走看看