模有问题...求教

60很顺利:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=200010;
const ll mod=1000000007;
ll a[maxn],r[maxn];
ll q_m(ll a,ll b){
ll ret=1;
while(b>0){
if(b&1){
ret*=a%mod;
ret%=mod;
}
a*=a%mod;
a%=mod;
b>>=1;
}
return ret;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=0;i<=n;++i)r[i]=q_m(2,i);
sort(a+1,a+n+1);
ll ans=0;
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
ans+=((a[j]-a[i])*r[j-i-1])%mod;
ans%=mod;
}
}
cout<<ans;
return 0;
}
预处理一些新的就行了
请问我模错在哪????
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=200010;
const ll mod=1000000007;
ll a[maxn],r[maxn],k[maxn];
ll q_m(ll a,ll b){
ll ret=1;
while(b>0){
if(b&1){
ret*=a%mod;
ret%=mod;
}
a*=a%mod;
a%=mod;
b>>=1;
}
return ret;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=0;i<=n;++i)r[i]=q_m(2,i);
k[0]=1;
for(int i=1;i<=n;++i)k[i]=(k[i-1]+r[i])%mod;
sort(a+1,a+n+1);
ll ans=0;
int sum=0;
for(int j=2;j<=n;++j){
sum+=((a[j]-a[1])*r[j-2])%mod;
sum%=mod;
}
for(int i=1;i<=n;++i){
ans=(sum+ans)%mod;
if(n-i-2==-1)break;
sum-=(a[i+1]-a[i]);
sum/=2;
sum=(sum%mod+(a[i]-a[i+1])*k[n-i-2]%mod+mod)%mod;
}
cout<<ans;
return 0;
}

2 条评论

  • @ 2017-08-21 22:27:19

    sum不能直接除2,请乘上2的逆元
    顺便,楼主能大致讲下此题做法?

  • @ 2017-08-21 19:48:42

    round1的#2: 简单题

  • 1

信息

难度
7
分类
(无)
标签
递交数
25
已通过
6
通过率
24%
被复制
1
上传者