#include <fstream> #include <iostream> using namespace std; #define MOD 10007 /* sub[0][][]:编号为偶数 sub[1][][]:编号为奇数 subSum[][][0]:颜色相同的下标之和 x1+x2+x3+... subSum[][][1]:颜色相同的数字之和 y1+y2+y3+... subSum[][][2]:是记录颜色相同的总个数 n subSum[][][3]:下标与颜色乘积 x1*y1 https://blog.csdn.net/Binary_Heap/article/details/78248494 */ int main() { int n, m, sum=0; int color[100010], number[100010]; int subSum[2][100010][4]; //ifstream cin("sum.in"); //ofstream cout("sum.out"); cin >> n >> m; for(int i = 1; i <= n; i ++) { cin >> number[i]; number[i] %= MOD; } for(int i = 1; i <= n; i ++) { cin >> color[i]; color[i] %= MOD; } for(int i = 1; i <= n; i ++) { subSum[i % 2][color[i]][0] = (subSum[i % 2][color[i]][0] + i) % MOD; subSum[i % 2][color[i]][1] = (subSum[i % 2][color[i]][1] + number[i]) % MOD; subSum[i % 2][color[i]][2] = (subSum[i % 2][color[i]][2] + 1) % MOD; subSum[i % 2][color[i]][3] = (subSum[i % 2][color[i]][3] + i * number[i]) % MOD; } /*(x1+x2+x3+..+xn)*(y1+y2+y3+..yn)+(n-2)*(x1*y1+..xn*yn)*/ for(int i = 1; i <= m; i ++) sum = (sum + (subSum[0][i][0] * subSum[0][i][1]) % MOD + ((subSum[0][i][2] - 2)*subSum[0][i][3]) % MOD + (subSum[1][i][0] * subSum[1][i][1]) % MOD + ((subSum[1][i][2] - 2)*subSum[1][i][3]) % MOD) % MOD; cout << sum << endl; //cin.close(); //cout.close(); return 0; } /************************************************************** Problem: 2342 User: admin Language: C++ Result: Accepted Time:309 ms Memory:5856 kb ****************************************************************/