记录编号 | 442698 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [NOIP 2015PJ]求和 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.212 s | ||
提交时间 | 2017-08-28 10:14:14 | 内存使用 | 7.94 MiB | ||
#include<bits/stdc++.h> #define ll long long using namespace std; const int mod=10007; ll n,m,num[100005],col[100005],f[100005][4],ans,next[100005][2],last[100005][2]; int main() { freopen("2015sum.in","r",stdin); freopen("2015sum.out","w",stdout); // freopen("1.txt","r",stdin); scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++) scanf("%lld",&num[i]); for(int i=1;i<=n;i++) scanf("%lld",&col[i]); for(ll i=1;i<=n;i++){ if(last[col[i]][i&1]) next[last[col[i]][i&1]][i&1]=i; last[col[i]][i&1]=i; } for(int i=1;i<=n;i++){ ll o=next[i][i&1]; f[o][0]+=f[i][0]+num[i]; f[o][1]+=f[i][1]+i; f[o][2]+=f[i][2]+1; f[o][3]+=f[i][3]+num[i]*i; ans+=(f[i][0]*i+f[i][1]*num[i]+f[i][2]*num[i]*i+f[i][3]); ans%=mod; } /* for(int i=1;i<=n;i++) cout<<f[i][2]<<" ";*/ cout<<ans; return 0; }