zoukankan      html  css  js  c++  java
  • bzoj 1965 数学

      首先我们可以发现每张牌的对应关系,假设序号为x的牌,经过一次洗牌后的位置为:

        2*x     x<=n/2

        2*(x-n/2)-1 x>n/2

      那么我们可以将下面的式子化简,变成2*x-n-1,其实这个就是2*x%(n+1),那么经过m次变换,x的位置为2^m*x%(n+1),设最后的答案为x,那么我们可以列出式子

        2^m*x%(n+1)=l,拓展欧几里得做就行了。

    /**************************************************************
        Problem: 1965
        User: BLADEVIL
        Language: C++
        Result: Accepted
        Time:0 ms
        Memory:804 kb
    ****************************************************************/
     
    //By BLADEVIL
    #include <cstdio>
    #define LL long long
     
    using namespace std;
     
    LL n,m,l;
    LL x,y;
     
    LL mi(LL x) {
        LL ans=1,sum=2;
        while (x) {
            if (x&1) ans=(ans*sum)%(n+1);
            sum=(sum*sum)%(n+1);
            x>>=1;
        }
        return ans;
    }
     
    void ex_gcd(LL a,LL b) {
        if (!b) {
            x=l; y=0; return;
        }
        ex_gcd(b,a%b);
        LL z=x;
        x=y;
        y=z-(a/b)*y;
    }
     
    int main() {    
        scanf("%lld %lld %lld",&n,&m,&l);
        LL a=mi(m),b=n+1;
        ex_gcd(a,b);
        x=((x%b)+b)%b;
        printf("%lld
    ",x);
        return 0;
    }
  • 相关阅读:
    团队冲刺第一天
    leetcode整理
    eclipse 中JSP环境搭建
    java期末小结
    桌面宠物online------------------面对对象程序综合设计2020年
    java
    4.3 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (20分)
    选择
    算法---分支限定0/1背包--蚁群算法
    博客园特效
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3638083.html
Copyright © 2011-2022 走看看