z函数72pts求查错
查看原帖
z函数72pts求查错
508544
FIND_14s_son_LiFeiMo楼主2021/12/10 20:14
#include<bits/stdc++.h>
using namespace std;
int z[60000000];
string b,a,c;int al,bl;long long ans1,ans2;
void get_z(){
	
	c=b+a;
	int cl=c.length();
	z[1]=1;
//	cout<<c<<" "<<cl<<endl;;
	int l=0;
    for(int i=1;i<cl;i++){
        if(l+z[l]>i) z[i]=min(z[i-l],l+z[l]-i);
        while(i+z[i]<cl&&c[z[i]]==c[i+z[i]]) z[i]++;
        if(i+z[i]>l+z[l]) l=i;
    }
}

int main(){
//	freopen("P5410_1.in","r",stdin);
	cin>>a>>b;al=a.length(),bl=b.length();
	get_z();
//	for(int i=0;i<=al+bl;i++)cout<<z[i]<<" ";cout<<endl;
//	ans1^=1ll*(bl+1);
	for(int i=0;i<bl;i++)
		ans1^=1ll*(min(z[i],bl-i)+1)*(i+1);
	for(int i=0;i<al;i++)
		ans2^=1ll*(min(z[i+bl],bl)+1)*(i+1);
	cout<<ans1<<endl<<ans2;
	return 0;
}

2021/12/10 20:14
加载中...