本地测评没问题但上交re……
查看原帖
本地测评没问题但上交re……
481521
Qiuziyi楼主2025/8/29 15:13

QwQ

#include<bits/stdc++.h>
using namespace std;
const int S=2e7+10;
long long la,lb,nxt[S],ext[S];
char a[S],b[S];
long long ans;
void add(char *x){
	int l=strlen(x),p=0,k=1;
	nxt[0]=l;
	while(p+1<l && x[p]==x[p+1]) p++;
	nxt[1]=p;
	for(int i=2;i<l;i++){
		p=k+nxt[k]-1;
		if(i+nxt[i-k]<=p) nxt[i]=nxt[i-k];
		else{
			int j=max(0,p-i+1);
			while(i+j<l && x[i+j]==x[j]) j++;
			nxt[i]=j,k=i;
		}
	}
}
int find(char *x,char *y){
	int lx=strlen(x),ly=strlen(y),p=0,k=1;
	while(p<lx && p<ly && x[p]==y[p]) p++;
	ext[0]=p;
	for(int i=1;i<lx;i++){
		p=k+ext[k]-1;
		if(i+nxt[i-k]<=p) ext[i]=nxt[i-k];
		else{
			int j=max(0,p-i+1);
			while(i+j<lx && j<ly && x[i+j]==y[j]) j++;
			ext[i]=j,k=i;
		}
	}
}
int main(){
	cin>>a>>b;
	la=strlen(a),lb=strlen(b);
	add(b);
	find(a,b);
	for(int i=0;i<lb;i++) ans^=(i+1)*(nxt[i]+1);
	printf("%lld\n",ans);
	ans=0;
	for(int i=0;i<la;i++) ans^=(i+1)*(ext[i]+1);
	printf("%lld",ans);
	return 0;
} 
2025/8/29 15:13
加载中...