站外题求助

学术版

Register_int @ 2022-01-31 00:24:01

题目链接
洛谷提交记录
我不理解,同一份代码同一道题,就是过不去。
最离谱的是他是答案错误。

#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;

const int MAXN = 1e5 + 10;

const int mod = 131;

int n;

int lens, len[MAXN];

int top;

ull h[MAXN], p[MAXN], st[MAXN];

char s[MAXN], t[MAXN];

int main() {
    p[0] = 1;
    for (int i = 1; i < MAXN; i++) p[i] = p[i - 1] * mod;
    scanf("%s%d", s + 1, &n), lens = strlen(s + 1);
    for (int i = 1; i <= n; i++) {
        scanf("%s", t + 1), len[i] = strlen(t + 1);
        for (int j = 1; j <= len[i]; j++) h[i] = h[i] * mod + t[j] - 'a';
    }
    for (int i = 1; i <= lens; i++) {
        s[++top] = s[i], st[top] = st[top - 1] * mod + s[top] - 'a';
        for (int j = 1; j <= n; j++) {
            if (top - len[j] < 0) continue;
            if (st[top] - st[top - len[j]] * p[len[j]] == h[j]) { top -= len[j]; break; }
        }
    }
    s[top + 1] = '\0';
    printf("%s\n", s + 1);
}

|