当前位置: 代码迷 >> 综合 >> ACM-ICPC 2018 焦作赛区网络预赛G Give Candies(水题)
  详细解决方案

ACM-ICPC 2018 焦作赛区网络预赛G Give Candies(水题)

热度:96   发布时间:2023-11-15 15:46:26.0

题目链接:https://nanti.jisuanke.com/t/31716

#include<bits/stdc++.h>
using namespace std;#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define read(x,y) scanf("%d%d",&x,&y)
#define ll long long#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int  maxn =1e5+5;
const int mod=1e9+7;
/*
题目大意:把n分成不超过n个段问有多少种组合方法另一种隔板,在n-1个空档中选择0到n-1个,答案是2^(n-1)。
最后配合个欧拉降幂公式即可。
*/
ll powmod(ll x,ll y)
{ll ret=1;for(;y;y>>=1,x=x*x%mod)if(y&1) ret=ret*x%mod;return ret;
}char s[maxn];
ll tp=0;
int main()
{int t;scanf("%d",&t);while(t--){tp=0;scanf("%s",s);int len=strlen(s);for(int i=0;i<len;i++){tp=tp*10+(s[i]-'0');tp%=mod-1;}if(tp==0) puts("1");else       printf("%lld\n",powmod(2LL,tp-1));}return 0;
}

 

  相关解决方案