社区讨论

警示后人100->85

P9753[CSP-S 2023] 消消乐参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@loczmy7e
此快照首次捕获于
2023/10/30 22:21
2 年前
此快照最后确认于
2023/11/02 10:36
2 年前
查看原帖
考场版:
CPP
#include <bits/stdc++.h>
using namespace std;

const int N = 2e6;
int n, f[N][26], cnt[N];
string s;

int main() {
    ios::sync_with_stdio(false);
    freopen("game.in", "r", stdin);
    freopen("game.out", "w", stdout);
    cin >> n >> s;
    memset(f, 0xff, sizeof(f));
    f[n-1][s[n-1]-'a'] = n-1;
    for(int i = n-2; i >= 0; --i) {
        int ni = f[i+1][s[i]-'a'];
        if(ni == -1) {
            f[i][s[i]-'a'] = i;
            continue;
        }
        cnt[i] = cnt[ni+1]+1;
        memcpy(f[i], f[ni+1], sizeof(f[i]));
        f[i][s[i]-'a'] = i;
    }
    long long ans = 0;
    for(int i = 0; i < n; ++i) ans += cnt[i];
    cout << ans << endl;
    return 0;
}
fix:\text{fix:}\\ int n, f[N][26], cnt[N]; \\\to\\ int n, f[N+1][26], cnt[N+1];
代码中 ni 表示使 [i, ni] 串合法且最小的数,本代码的问题在于 ni 可能为 n-1,直接溢出。

回复

7 条回复,欢迎继续交流。

正在加载回复...