You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.7 KiB

2 years ago
#include <bits/stdc++.h>
using namespace std;
const int N = 100010, mod = 10007;
int w[N]; // 第i个格子的数字
int c[N]; // 第i个格子的颜色
int s[N][2];
// s[i][0]:颜色为i、编号为偶数格子上数字的和
// s[i][1]:颜色为i、编号为奇数格子上数字的和
int cnt[N][2];
// cnt[i][0]:颜色为i、编号为偶数格子的个数
// cnt[i][1]:颜色为i、编号为奇数格子的个数
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> w[i]; // 第i个格子的数字
// 预处理
for (int i = 1; i <= n; i++) { // 遍历每个格子
cin >> c[i]; // 格子颜色c[i]
/*
,
c[i]
s[][]:is
cnt[][]:
*/
s[c[i]][i % 2] = (s[c[i]][i % 2] + w[i]) % mod; // 累加分组内数字和
cnt[c[i]][i % 2]++; // 维护分组内格子个数
}
int ans = 0;
for (int i = 1; i <= n; i++) // 枚举每个格子
/*
Q:
(1) c[i] :
(2) i % 2 :
Q:
cnt[c[i]][i % 2]
*/
ans = (ans + i * ((cnt[c[i]][i % 2] - 2) * w[i] % mod + s[c[i]][i % 2])) % mod;
printf("%d\n", ans);
return 0;
}