第4个点是什么数据?过不了,其他各种样例测试数据都能过。
查看原帖
第4个点是什么数据?过不了,其他各种样例测试数据都能过。
331817
lirunjia楼主2023/7/21 11:48
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
char s1[1000010],s2[1000010];
ULL p[1000010],H[1000010];
ULL h(char s[]){
	ULL sum=0;
	int len=strlen(s+1);
	for(int i=1;i<=len;i++) sum=sum*131+(s[i]-'a'+1);
	return sum;
}
int main(){
	cin>>s1+1>>s2+1;
	int len1=strlen(s1+1),len2=strlen(s2+1);
	if(len1>len2) swap(s1,s2);
	else if(len1==len2) {
		if(h(s1)==h(s2)){
			cout<<s1+1<<" is substring of "<<s2+1;
			return 0;
		}	
		else {
			cout<<"No substring";
			return 0;
		}
	}
	int small_s=h(s1);
	len1=strlen(s1+1);
	len2=strlen(s2+1);
	p[0]=1;
	for(int i=1;i<=len2;i++){
		H[i]=H[i-1]*131+(s2[i]-'a'+1);
		p[i]=p[i-1]*131;
	}
	bool flag=0;
	for(int i=1;i+len1-1<=len2;i++){
		if(small_s==H[i+len1-1]-H[i-1]*p[len1]) {
			flag=1;
			break;
		}			
	}
	if(flag) cout<<s1+1<<" is substring of "<<s2+1;
	else cout<<"No substring";
		
	return 0;
}
2023/7/21 11:48
加载中...