记录编号 442698 评测结果 AAAAAAAAAA
题目名称 [NOIP 2015PJ]求和 最终得分 100
用户昵称 GravatarCSU_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;
}