您的位置:首页 > 其它

Codeforces Round #209 (Div. 2)C

2013-11-02 23:58 375 查看
刷了一页的WA 。。终于发现了 哪里错了 快速幂模板里一个变量t居然开得long ...

虽然代码写的丑了点 但是是对的 那个该死的long 啊..

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
using namespace std;
#define mod 1000000007
#define LL __int64
#define N 100010
LL n,x,a
,s,b
;
LL exp_mod(LL a,LL n,LL b)
{
long long t;
if(n==0) return 1%b;
if(n==1) return a%b;
t=exp_mod(a,n/2,b);
t=t*t%b;
if((n&1)==1) t=t*a%b;
return t;
}
int main()
{
int i;
cin>>n>>x;
for(i = 1; i <= n ; i++)
{
scanf("%I64d",&a[i]);
s = s+a[i];
b[i] = a[i];
}
for(i = 1; i <= n ; i++)
{
b[i] = s-a[n-i+1];
}
for(i = 1; i <= n ;i++)
a[i] = b[i];
LL k = a[1];
int o = 2;LL ss=a[1];
LL sum=1;
b[2]-=a[1];
while(1)
{
if(b[o]==0&&o<=n)
{
o++;
b[o]-=a[o-1];
sum++;
if(o>n) break;
else
continue;
}
if(o>n) break;
if(sum%x!=0) break;
while(sum%x==0&&o<=n)
{
sum/=x;
ss++;
b[o]--;
if(b[o]==0)
{
o++;
b[o]-=a[o-1];
sum++;
break;
}
}
if(o>n) break;
}
while(sum&&sum%x==0)
{
ss+=1;
sum/=x;
}
printf("%I64d\n",exp_mod(x,min(s,ss),mod));
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: