2013年11月2日 星期六
Codeforces Round #209 (Div. 2) C - Prime Number
#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
int mod=1000000007,m;
int s[100005];
priority_queue<int> que;
long long int pow(long long int k){
if(k==1) return m;
if(k==0) return 1;
long long int t;
t=pow(k/2),t=t*t%mod;
if(k%2==0) return t;
t=t*m%mod;
return t;
}
int main(){
int n,i,x,y;
long long int add=0,ans=0;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&s[i]),add+=s[i],que.push(s[i]);
x=1,y=que.top();que.pop();
while(que.size()){
if(y==que.top()) x++,que.pop();
else{
if(x) break;
else y=que.top(),x++;
que.pop();
}
if(x==m){
x=0;
que.push(y-1);
}
}
if(y<0) y=0;
printf("%I64d\n",pow(add-y));
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言