zoukankan      html  css  js  c++  java
  •  

    思路:

    以样例为例,经过一次变化

    1 2 3 4 5 6  

    4 1 5 2 6 3

    我们发现 1卡牌到了 2位置 ,2卡牌到了 4位置,3卡牌到了 6位置, 很明显看出:位置变化是原位置的 2 倍。那后面的岂不是超出了范围?我们再 mod (n+1) (因为要保证在 1~6 的范围内)

    设 x 为牌面大小(等同于初始的位置,也就是我们要求的 ans), L 是题目给定的位置,可以有:

    x * 2^m = L % (n+1)   

    x = L* (2^m)-1 % (n+1)

    因为(2^m)-1 的逆元并不好求,而 (2^m)-1 = (2-1)^m ,所以我们就把问题转变为:求 2-1 的逆元,可以有:

    2*A Ξ 1 % (n+1)

    A=(n+2) / 2

    x =( (n+2)/2 )^m * L %(n+1) //终于推完,累……,非常感谢yx学长的指点>:<

    std正解(相思豆想不到的逆元)

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    int mod,n,m,l;
    
    inline ll ksm(int a,int b){
        ll ans=1;
        while(b){
            if(b&1) ans=1ll*a*ans%mod;
            a=1ll*a*a%mod;b>>=1;
        }
        return ans;
    }
    
    int main()
    {
        scanf("%d%d%d",&n,&m,&l);
        mod=n+1;
        printf("%lld
    ",ksm(n/2+1,m)*l%(n+1));
        return 0;
    }
    /*
    6 2 3
    6 张牌 做 2 次 问第 3 
    */
    从0到1很难,但从1到100很容易
  • 相关阅读:
    第07组 Alpha冲刺(1/6)
    第07组 团队Git现场编程实战
    第07组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    0012---求滑动距离
    0011---绝对值函数
    0010---温度转换
    0009---乘法问题
    0008---三位数倒序问题
  • 原文地址:https://www.cnblogs.com/qseer/p/9563219.html
Copyright © 2011-2022 走看看