这个思路是否可以进行优化?
查看原帖
这个思路是否可以进行优化?
574944
Micnation_AFO楼主2022/8/12 10:20

首先用 NextiNext_i 表示下一个与第 ii 个颜色相同的点的坐标,然后枚举第一个数,通过 NextNext 数组可以知道第三个数,然后判断一下是否可以存在 yy,如果存在的话,就加上这一组的和。

但是如果 colorcolor 数组很多都是一样的话,就被卡了,80pts。是否有优化的地步?

#include <iostream>

using namespace std;

const int N = 100010;
const int mod = 10007;

int n, m;
int sum = 0;
int num[N], color[N];
int Next[N], val[N];

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) cin >> num[i];
    for (int i = 1; i <= n; i++) {
        cin >> color[i];
        Next[val[color[i]]] = i, val[color[i]] = i;
    }
    for (int i = 1; i <= n; i++) {
        int x = Next[i];
        while (x) {
            if ((x - i) % 2) { x = Next[x]; continue; }
            sum += (i + x) % mod * (num[i] + num[x]) % mod, sum %= mod;
            x = Next[x];
        }
    }
    cout << sum << endl;
    return 0;
}

2022/8/12 10:20
加载中...