站外题求助
  • 板块学术版
  • 楼主Register_int-std=c++14
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/1/31 00:24
  • 上次更新2023/10/28 10:00:08
查看原帖
站外题求助
406941
Register_int-std=c++14楼主2022/1/31 00:24

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

#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);
}
2022/1/31 00:24
加载中...