zoukankan      html  css  js  c++  java
  • ACM-ICPC 2018 焦作赛区网络预赛 G Give Candies(高精度求余)

    https://nanti.jisuanke.com/t/31716

    题意

    n颗糖果n个人,按顺序给每个人任意数目(至少一个)糖果,问分配方案有多少。

    分析

    插板法或者暴力打表后发现答案就为2^(n-1),只是这个n有点大。于是马上用java。然而现实相当残酷,超时。

    然后想到降幂,即(a^b)%m=a^(b%phi(m))%m,当gcd(b,m)==1。这里显然互质,于是降幂后仍然用java写,还是tle。

    而后还尝试了C++大数来写,可能是使用姿势错误,也t了。

    到了最后一小时,没错,我们队卡这题卡到了最后一小时,很绝望。

    最后想到了直接模拟求余就好了,其它大数操作都是不必要的。到此,终于过了。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn = 1e5+10;
    const int mod = 1e9 + 7;
    char s[maxn];
    ll qpow(ll a,ll b){
        ll res=1;
        while(b){
            if(b&1) res=res*a%mod;
            b>>=1;
            a=a*a%mod;
        }
        return res;
    }
    int main(){
        int t;
        scanf("%d",&t);
        int phi = 1e9 + 6;
        while(t--){
            scanf("%s",s);
            ll ans=0;
            int n = strlen(s);
            for(int i=0;i<n;i++){
                ans=(ans*10+(s[i]-'0'))%phi;
            }
            ans=(ans-1+phi)%phi;
            printf("%lld
    ",qpow(2,ans));
        }
        return 0;
    }
  • 相关阅读:
    数据库之表与表之间的关系
    数据库之完整性约束条件
    基本数据类型
    数据库
    Django ajax 发送post请求 前端报错解决
    Django数据库建立注意事项
    编程单词汇总
    程序员必掌握600单词
    python思维导图
    用jQuery模拟hover选择效果
  • 原文地址:https://www.cnblogs.com/fht-litost/p/9662687.html
Copyright © 2011-2022 走看看