大佬求助,90分,wa
查看原帖
大佬求助,90分,wa
680048
kxr_楼主2024/8/15 22:25
#include<bits/stdc++.h>
using namespace std;
char s2[1000001],s1[1000001];
int Next[1000001],len1,len2,n;
void getNext(){
	int j=1,k=0;
	Next[1]=0;
	while(j<n){
		if(k==0||s1[j]==s1[k]){
			Next[++j]=++k;
		}else{
			k=Next[k];
		}
	}
}
int main(){
	freopen("Simpsons' Hidden Talents.in","r",stdin);
	freopen("Simpsons' Hidden Talents.out","w",stdout);
	while(scanf("%s",s1+1)!=EOF){
		len1=strlen(s1+1);
		scanf("%s",s2+1);
		len2=strlen(s2+1);
		strcat(s1+1,s2+1);
		n=len1+len2+1;
		getNext();
		for(int x=1;x<=n;x++){
			Next[x]-=1;
		}
		if(Next[n]){
			if(Next[n]>len1||Next[n]>len2){
				if(len1<len2){
					s1[len1+1]='\0';
					printf("%s %d\n",s1+1,len1);
				}else{
					s2[len2+1]='\0';
					printf("%s %d\n",s1+1,len2);
				}
			}else{
				s1[Next[n]+1]='\0';
				printf("%s %d\n",s1+1,Next[n]);
			}
		}else{
			cout<<0<<endl;
		}
	}
	return 0;
}
2024/8/15 22:25
加载中...