记录编号 556656 评测结果 AAAAAAAAAA
题目名称 [NOIP 2015PJ]求和 最终得分 100
用户昵称 Gravatar2020noip 是否通过 通过
代码语言 C++ 运行时间 0.576 s
提交时间 2020-10-24 11:11:46 内存使用 12.32 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct node
{
    long long id;
    long long w;
    long long cl;
};
node a[200000];
int main()
{
	freopen("2015sum.in","r",stdin);
    freopen("2015sum.out","w",stdout);
    int n,m;
     scanf("%d%d",&n,&m);
     vector<vector<node> >v1(m+1),v0(m+1);
     for(int i=1;i<=n;i++)
     {
         a[i].id=i;
         scanf("%lld",&a[i].w);
     }
      for(int i=1;i<=n;i++)
        {
            scanf("%lld",&a[i].cl);
            if(i%2==0)
               v0[a[i].cl].push_back(a[i]);
            else
               v1[a[i].cl].push_back(a[i]);
        }
       long long ans=0;
        for(int i=1;i<v0.size();i++)
        {
             int len=v0[i].size();
            if(len<=1)continue;
            long long sumid=0,sumw=0;
            long long sab=0;
            for(int j=0;j<len;j++)
            {
                sumid=(sumid+v0[i][j].id)%10007;
                sumw=(sumw+v0[i][j].w)%10007;
                sab=(sab+v0[i][j].id*v0[i][j].w)%10007;
            }
            sab=sab*(len-2)%10007;
            ans=(ans+(sumid*sumw)%10007+sab)%10007;
        }

        for(int i=1;i<v1.size();i++)
        {
            int len=v1[i].size();
            if(len<=1)continue;
            int sumid=0,sumw=0;
              long long sab=0;
            for(int j=0;j<len;j++)
            {
                sumid=(sumid+v1[i][j].id)%10007;
                sumw=(sumw+v1[i][j].w)%10007;
                   sab=(sab+v1[i][j].id*v1[i][j].w)%10007;
            }
              sab=sab*(len-2)%10007;
            ans=(ans+(sumid*sumw)%10007+sab)%10007;
        }
     printf("%lld\n",ans);
     return 0;
}