蒟蒻求助
查看原帖
蒟蒻求助
631678
crazy__sheep楼主2024/7/22 21:02
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e7+5;
int n,m,v[N],p=1,r=-1,ans;
char a[N],b[N];
signed main()
{
//	freopen("k.in","r",stdin);
//	freopen("WA.out","w",stdout);
	cin>>a+1>>b+1;
	n=strlen(b+1);m=strlen(a+1);
	a[0]=b[0]=']';a[m+1]=b[n+1]='[';
	for(int i=1;i<=n;i++)
	{
		int q=i-p+1;
		if(i<=r)v[i]=min(v[q],r-i+1);v[i]++;
		while(b[v[i]]==b[v[i]+i-1]&&v[i]+i-1<=n&&v[i]<=n)v[i]++;v[i]--;
		if(i+v[i]-1>r)r=v[i]+i-1,p=i;
	}
	for(int i=1;i<=n;i++)
	{
//		cout<<v[i]<<" ";
		int po=i*(v[i]+1);
		ans^=po; 
	}
	cout<<ans<<endl;
	ans=0;r=-1;p=1;
	memset(v,0,sizeof(v));
	for(int i=1;i<=m;i++)
	{
		int q=i-p+1;
		if(i<=r)v[i]=min(v[q],r-i+1);v[i]++;
		while(b[v[i]]==a[v[i]+i-1]&&v[i]+i-1<=m&&v[i]<=n)v[i]++;v[i]--;
		if(i+v[i]>r)r=v[i]+i,p=i;
	}
	for(int i=1;i<=m;i++)
	{
		cout<<v[i]<<" ";
		int po=i*(v[i]+1);
		ans^=po;
	}
	cout<<ans;
	return 0;
}
2024/7/22 21:02
加载中...