64pts WA 求调
  • 板块学术版
  • 楼主lottle1212__
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/11 23:09
  • 上次更新2024/5/12 10:38:49
查看原帖
64pts WA 求调
1062683
lottle1212__楼主2024/5/11 23:09

Code

#include <iostream>
#include <string.h>
#define ll long long
using namespace std;
const int N = 2e7 + 10;
int n, m, z[N], p[N]; char s[N], t[N];
signed main() {
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);
	cin >> s + 1 >> t + 1;
	n = strlen(s + 1), m = strlen(t + 1);
	z[1] = m;
	for (int i = 2, r = 0, l; i <= m; ++ i) {
		if (i <= r) z[i] = min(z[i - l + 1], r - i + 1);
		while (i + z[i] <= n && t[1 + z[i]] == t[i + z[i]]) ++ z[i];
		if (i + z[i] - 1 > r) r = i + z[i] - 1, l = i;
	}
	ll ans = 0;
	for (int i = 1; i <= m; ++ i) ans ^= (ll) i * (z[i] + 1);
	cout << ans << '\n';
	for (int i = 1, r = 0, l; i <= n; ++ i) {
		if (i <= r) p[i] = min(z[i - l + 1], r - i + 1);
		while (i + p[i] <= n && 1 + p[i] <= m && s[i + p[i]] == t[1 + p[i]]) ++ p[i];
		if (i + p[i] - 1 > r) r = i + p[i] - 1, l = i;
	}
	ans = 0;
	for (int i = 1; i <= n; ++ i) ans ^= (ll) i * (p[i] + 1);
	cout << ans << '\n';
	return 0;
}
2024/5/11 23:09
加载中...