记录编号 |
442698 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2015PJ]求和 |
最终得分 |
100 |
用户昵称 |
CSU_Turkey |
是否通过 |
通过 |
代码语言 |
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;
}