TLE on#9#10,求调
查看原帖
TLE on#9#10,求调
549309
imfbust楼主2024/7/23 14:53
#include<bits/stdc++.h>
using namespace std;
int n;
string a,b;
void z_functions1(string s){
	int n=(int)s.size();
	long long ans=n+1;
	vector<int> z(n);
	for(int i=1,l=0,r=0;i<n;++i){
		if(i<=r&&z[i-l]<r-i+1) z[i]=z[i-l];
		else{
			z[i]=max(0,r-i+1);
			while(i+z[i]<n&&s[z[i]]==s[i+z[i]]) ++z[i];
		}
		if(i+z[i]-1>r){
			l=i;
			r=i+z[i]-1;
		}
	}
//	for(int i=1;i<n;i++) printf("%d ",z[i]);
	for(int i=1;i<n;i++) ans^=1ll*(i+1)*(z[i]+1);
	printf("%lld\n",ans);
}
void z_functions2(int m,string s){
	int n=(int)s.length();
	long long ans;
	vector<int> z(n);
	for(int i=1,l=0,r=0;i<n;++i){
		if(i<=r&&z[i-l]<r-i+1) z[i]=z[i-l];
		else{
			z[i]=max(0,r-i+1);
			while(i+z[i]<n&&s[z[i]]==s[i+z[i]]) ++z[i];
		}
		if(i+z[i]-1>r){
			l=i;
			r=i+z[i]-1;
		}
	}
	ans=z[m]+1;
	for(int i=m+1;i<n;i++) ans^=1ll*(i-m+1)*(z[i]+1);
	printf("%lld",ans);
}
int main(){
	cin>>a>>b;
	z_functions1(b);
	z_functions2(b.size()+1,b+'#'+a);
	return 0;
}

附测评记录

2024/7/23 14:53
加载中...