既然我提交不了,那么有没有人帮我提交呢?(QwQ)
查看原帖
既然我提交不了,那么有没有人帮我提交呢?(QwQ)
658786
STUDENT00楼主2023/1/8 17:13

代码:

#include<bits/stdc++.h>
#define int long long
#define N 40000005
using namespace std;
char a[N],b[N];
int la,lb,nxt[N],ext[N],ans1,ans2; 
signed main(){
	scanf("%s%s",a,b);la=strlen(a);lb=strlen(b);
	int p=0,k=1,l;
	nxt[0]=lb;
	while(p+1<la&&b[p]==b[p+1]) p++;
	nxt[1]=p;
	for(int i=2;i<lb;i++){
		p=nxt[k]+k-1;
		l=nxt[i-k];
		if(i+l<=p) nxt[i]=l;
		else{
			int j=max(0,p-i+1);
			while(i+j<lb&&b[j]==b[i+j]) j++;
			nxt[i]=j; 
			k=i;
		}
	}
	p=0;k=0;
	while(p<la&&p<lb&&a[p]==b[p]) p++;
	ext[0]=p;
	for(int i=1;i<la;i++){
		p=ext[k]+k-1;
		l=nxt[i-k];
		if(i+l<=p) ext[i]=l;
		else{
			int j=max(0,p-i+1);
			while(i+j<la&&a[i+j]==b[j]) j++;
			ext[i]=j; 
			k=i;
		}
	}
	for(int i=0;i<lb;i++) ans1^=(i+1)*(nxt[i]+1);
	for(int i=0;i<la;i++) ans2^=(i+1)*(ext[i]+1);
	printf("%lld\n%lld",ans1,ans2);
	return 0;
} 

记得开启O2优化

2023/1/8 17:13
加载中...