数据建议再加强
查看原帖
数据建议再加强
310439
星星与辰楼主2023/10/5 09:51
#include<bits/stdc++.h>
using namespace std;
vector<char> a , b;
vector<int> nxt , exnxt;
int main()
{
	for (char c (getchar()) ; isalpha(c) ; c = getchar())
		b.push_back(c);
	for (char c (getchar()) ; isalpha(c) ; c = getchar())
		a.push_back(c);
	const int lena (a.size()) , lenb (b.size());
	nxt.push_back(lena);
	int p , k (1) , l (0);
	while (l + 1 < lena && a[l] == a[l + 1]) ++l;
	nxt.push_back(l);
	p = l;
	long long ans (lena + 1 ^ (l + 1 << 1));
	for (int i (2) ; i < lena ; ++ i)
	{
		l = nxt[i - k];
		if (i + l <= p)
			nxt.push_back(l);
		else
		{
			int j (max(0 , p - i + 1));
			while (i + j < lena && a[i + j] == a[j]) ++ j;
			nxt.push_back(j);
			k = i ,
			p = nxt[k] + k - 1;
		}
		ans ^= 1ll * (i + 1) * (nxt[i] + 1);
	}
	printf("%lld\n" , ans);
	l = 0 , k = 0;
	while (l < lena && l < lenb && a[l] == b[l]) ++ l;
	exnxt.push_back(l);
	ans = l + 1 , p = l - 1;
	for (int i (1) ; i < lenb ; ++ i)
	{
		l = nxt[i - k];
		if (i + l <= p)
			exnxt.push_back(l);
		else
		{
			int j (max(0 , p - i + 1));
			while (i + j < lenb && j < lena && b[i + j] == a[j]) ++ j;
			exnxt.push_back(j);
			k = i , 
			p = exnxt[k] + k - 1;
		}
		ans ^= 1ll * (i + 1) * (exnxt[i] + 1);
	}
	printf("%lld" , ans);
	return 0;
}

这是我的AC代码,但是第二次k初始化时我赋值为1,能拿72分,nxt[0]和nxt[1]相差很大的,建议加强。

2023/10/5 09:51
加载中...