NOIP2015 求和
#include<cstdio> #define FOR(a,b,c) for(int a=(b);a<=(c);a++) using namespace std; typedef long long LL; const int maxn=100000+10; const int MOD=10007; LL n,m,a[maxn],c[maxn],sr[maxn][2],sa[maxn][2],s[maxn][2],sq[maxn][2]; int main(){ scanf("%lld%lld",&n,&m); FOR(i,1,n)scanf("%lld",&a[i]); FOR(i,1,n)scanf("%lld",&c[i]); LL ans=0; FOR(i,1,n){ int p=i&1,ci=c[i]; s[ci][p]++; if(s[ci][p]>1) ans+=(a[i]*sr[ci][p])%MOD+(i*sa[ci][p])%MOD+sq[ci][p]+((s[ci][p]-1)*i*a[i]%MOD); ans%=MOD; sr[ci][p]+=i; sa[ci][p]+=a[i]; sq[ci][p]+=i*a[i]; } ans%=MOD; printf("%lld\n",ans); return 0; }