参照的是第二篇题解
爆零了,但是样例全过了……
#include<bits/stdc++.h>
#define mod 10007
using namespace std;
long long re,n,m,dp[2][100010][4],number[100010],ans;
char c;
int read(){
re=0;
c=getchar();
while(c<'0'||c>'9'){
c=getchar();
}
while(c>='0'&&c<='9'){
re=(re<<3)+(re<<1)+(c^48);
c=getchar();
}
return re;
}
void write(int x){
if(x/10){
write(x/10);
}
putchar(x%10|48);
}
int main(){
//freopen("P2671_1.in","r",stdin);
n=read();
m=read();
for(int i = 1;i<=n;i++){
number[i]=read();
}
for(int i = 1;i<=n;i++){
int x;
x=read();
dp[i%2][x][3]++;
if(dp[i%2][x][3]==2){
ans+=(((dp[i%2][x][0]+number[i])%mod)*((dp[i%2][x][1]+i)%mod))%mod;
ans%=mod;
}
dp[i%2][x][0]+=number[i];
dp[i%2][x][0]%=mod;
dp[i%2][x][1]+=i;
dp[i%2][x][1]%=mod;
if(dp[i%2][x][3]>2){
ans+=(((dp[i%2][x][0]*i)%mod)+((dp[i%2][x][1]*number[i])%mod)+dp[i%2][x][2])%mod;
ans%=mod;
}
dp[i%2][x][2]+=number[i]*i;
dp[i%2][x][2]%=mod;
}
write(ans);
return 0;
}