• BZOJ-1965: [Ahoi2005]SHUFFLE 洗牌 (快速幂+乘转加)


    1965: [Ahoi2005]SHUFFLE 洗牌

    Time Limit: 3 Sec  Memory Limit: 64 MB
    Submit: 893  Solved: 584
    [Submit][Status][Discuss]

    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

    HINT

     

    Source

    Day1

    laj的第100题qwq值得纪念qwq

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 typedef long long LL;
     4 LL n,m,l,ans,mod;
     5 LL ksc(LL a,LL b){
     6     LL an=0;
     7     while (b){
     8         if (b&1) an=(an+a)%mod;
     9         a=(a+a)%mod,b>>=1; 
    10     }
    11     return an;
    12 }
    13 LL ksm(LL a,LL b){
    14     LL an=1;
    15     while (b){
    16         if (b&1) an=ksc(an,a);
    17         a=ksc(a,a);
    18         b>>=1;
    19     }
    20     return an;
    21 }
    22 int main(){
    23     freopen ("card.in","r",stdin);freopen ("card.out","w",stdout);
    24     int i,j;
    25     scanf("%lld%lld%lld",&n,&m,&l);mod=n+1;
    26     ans=(l*ksm(n/2+1,m)+mod)%mod;
    27     printf("%d",ans);
    28     return 0;
    29 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    How To Build CyanogenMod Android for smartphone
    CentOS安装Code::Blocks
    How to Dual boot Multiple ROMs on Your Android SmartPhone (Upto Five Roms)?
    Audacious——Linux音乐播放器
    How to Dual Boot Multiple ROMs on Your Android Phone
    Everything You Need to Know About Rooting Your Android Phone
    How to Flash a ROM to Your Android Phone
    什么是NANDroid,如何加载NANDroid备份?
    Have you considered compiled a batman-adv.ko for android?
    BATMAN—Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.)
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7780845.html
Copyright © 2020-2023  润新知