Codeforces Round #647 (Div. 2) - Thanks, Algo Muse! 参与排名人数12044
[codeforces 1362E] Johnny and Grandmaster p进制
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1362/problem/E
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
E - Johnny and Grandmaster | GNU C++17 | Accepted | 873 ms | 4100 KB |
思路摘自:https://www.cnblogs.com/spnooyseed/p/13051426.html
赛后诸葛亮:上述思路中,只能想到1,2,但是3,4,5确实没想到。
AC代码如下
#include <cstdio>
#include <algorithm>
#define maxn 1000010
#define LL long long
using namespace std;
const LL mod=1e9+7,MOD=1e9+3;
int k[maxn];
LL ans1,ans2;
int cmp(int a,int b){
return a>b;
}
LL quick_pow(LL a,LL b,LL m){
LL ret=1;
while(b){
if(b&1)ret=ret*a%m;
a=a*a%m;
b>>=1;
}
return ret%m;
}
int main(){
int t,n,p,i;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&p);
for(i=1;i<=n;i++)scanf("%d",&k[i]);
if(p==1){printf("%d\n",n%2);continue;}
sort(k+1,k+1+n,cmp);//自大到小排序
ans1=ans2=0;
for(i=1;i<=n;i++)
if(!ans1&&!ans2)ans1=quick_pow(p,k[i],mod),ans2=quick_pow(p,k[i],MOD);
else{
ans1=((ans1-quick_pow(p,k[i],mod))%mod+mod)%mod;
ans2=((ans2-quick_pow(p,k[i],MOD))%MOD+MOD)%MOD;
}
printf("%lld\n",ans1);
}
return 0;
}