为什么两份一模一样的代码一份AC一份WA??
查看原帖
为什么两份一模一样的代码一份AC一份WA??
107640
duoluoluo楼主2021/9/1 15:57

这份代码第一次提交的时候AC,再次提交时却WA了???

求大佬告诉我这是怎么回事

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 1000010, hashBase[2] = {29, 31}, hashMod[2] = {1000000007, 1000000009};
int n, tot, len, pre[N][2], suf[N][2], power[N][2];
char ans[N], s[N];
int main () {
	power[0][0] = power[0][1] = 1;
	for (int i = 1; i <= 1000000; i ++) {
		power[i][0] = 1ll * power[i - 1][0] * hashBase[0] % hashMod[0];
		power[i][1] = 1ll * power[i - 1][1] * hashBase[1] % hashMod[1];
	}
	scanf("%d", &n);
	for (int i = 1; i <= n; i ++) {
		scanf("%s", s + 1);
		len = strlen(s + 1);
		for (int j = 1; j <= len; j ++) {
			pre[j][0] = (1ll * pre[j - 1][0] * hashBase[0] + s[j]) % hashMod[0];
			pre[j][1] = (1ll * pre[j - 1][1] * hashBase[1] + s[j]) % hashMod[1];
		}
		int minn = min(len, tot), k = 1;
		for (int j = 1; j <= minn; j ++) {
			int tmp0 = ((suf[tot][0] - 1ll * suf[tot - j][0] * power[j][0]) % hashMod[0] + hashMod[0]) % hashMod[0], tmp1 = ((suf[tot][1] - 1ll * suf[tot - j][1] * power[j][1]) % hashMod[1] + hashMod[1]) % hashMod[1];
			if (pre[j][0] == tmp0 && pre[j][1] == tmp1) k = j + 1;
			else continue;
		}
		for (int j = k; j <= len; j ++) {
			ans[++ tot] = s[j];
			suf[tot][0] = (1ll * suf[tot - 1][0] * hashBase[0] + s[j]) % hashMod[0];
			suf[tot][1] = (1ll * suf[tot - 1][1] * hashBase[1] + s[j]) % hashMod[1];
		}
	}
	for (int i = 1; i <= tot; i ++)
		printf("%c", ans[i]);
	return 0;
}
2021/9/1 15:57
加载中...