求调玄关
  • 板块灌水区
  • 楼主wuming_z
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/2/7 17:56
  • 上次更新2025/2/7 20:35:17
查看原帖
求调玄关
1125000
wuming_z楼主2025/2/7 17:56

rt,
WA

#include <bits/stdc++.h>
using namespace std;
#define int long long
int z[20000001],p[20000001];
string a,b;
void gz(){
	z[0]=b.size();
	for(int i=1,l=0,r=0;i<b.size();i++){
		if(i<=r&&z[l]<r-i+1)z[i]=z[l];
		else{
			z[i]=max(0ll,r-i+1);
			while(b[z[i]]==b[z[i]+i] && z[i]+i<b.size())++z[i];
		}if(r<i+z[i]-1)l=i,r=i+z[i]-1;
	}
}
void gp(){
	for(int i=0;i<min(a.size(),b.size()) && a[i]==b[i];i++)p[0]++;
	for(int i=1,l=0,r=0;i<a.size();i++){
		if(i<=r&&p[l]<r-i+1)p[i]=p[l];
		else{
			p[i]=max(0ll,r-i+1);
			while(b[p[i]]==a[p[i]+i] && p[i]+i<a.size())++p[i];
		}if(r<i+p[i]-1)l=i,r=i+p[i]-1;
	}
}
signed main() {
	cin>>a>>b;
	gz();
	gp();
	int zo=0,po=0;
	for(int i=1;i<=b.size();i++)zo^=i*(z[i-1]+1);
	for(int i=1;i<=a.size();i++)po^=i*(p[i-1]+1);
	cout<<zo<<endl<<po;
	return 0;
}
2025/2/7 17:56
加载中...