您的位置:首页 > 其它

hdu 4655 Cut Pieces

2013-08-10 09:55 337 查看
这个解题报告讲的很详细了!!!

代码如下:

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define MAX 1000010
#define mod 1000000007
using namespace std;
int an[MAX];
ll s,ans,temp;
ll pows(ll a,ll b){
ll ans=1;
while(b){
if(b&1) ans=(ans*a)%mod;
b>>=1;
a=(a*a)%mod;
}
return ans;
}
int main(){
int t,i,j,n;
cin>>t;
while(t--){
cin>>n;
s=1;
for(i=0;i<n;i++){
scanf("%d",&an[i]);
s*=an[i];
s%=mod;
}
sort(an,an+n);
j=n-1;
ans=n*s%mod;
temp=0;
for(i=n-1;i>=0;i--){
if(!j) break;
ll tt=s*pows(an[i],mod-2)%mod;
temp=(tt+temp)%mod;
j--;
if(!j) break;
temp=(tt+temp)%mod;
j--;
if(!j) break;
}
printf("%I64d\n",((ans-temp)%mod+mod)%mod);
}
return 0;
}


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