80分求助,WA#4
查看原帖
80分求助,WA#4
736997
zhuxinlei楼主2024/7/5 14:58
#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull n,b[100005],p=131,mod=1000000007,hash1[100001],hasha;
string s1,s2;
ull sb(char t){
	ull ret=t-'A'+1;
	return ret;
}
ull hash_str(string t){
	ull ret=0,sz=t.size();
	for(int i=0;i<sz;i++) ret=(ret*p+sb(t[i]))%mod;
	return ret;
}
int main(){
	cin>>s1>>s2;
	if(s1.size()<s2.size()){
		ull ans=0;
		hasha=hash_str(s1);
		for(int i=1;i<=s2.size();i++) hash1[i]=hash1[i-1]*p+sb(s2[i]);
		for(int i=1;i<=s2.size()-s1.size()+1;i++){
			if(hash1[i+s1.size()-1]-hash1[i-1]*pow(p,s1.size())==hasha){
				ans++;
			}
		}
		if(ans>0) cout<<s1<<" is substring of "<<s2;
		else cout<<"No substring";
	}
	else if(s1.size()>s2.size()){
		ull ans=0;
		hasha=hash_str(s2);
		for(int i=1;i<=s1.size();i++) hash1[i]=hash1[i-1]*p+sb(s1[i]);
		for(int i=1;i<=s1.size()-s2.size()+1;i++){
			if(hash1[i+s2.size()-1]-hash1[i-1]*pow(p,s2.size())==hasha){
				ans++;
			}
		}
		if(ans>0) cout<<s2<<" is substring of "<<s1;
		else cout<<"No substring";
	}
	else{
		if(s1!=s2) cout<<"No substring";
		else cout<<s1<<" is substring of "<<s2;
	}
	return 0;
}
2024/7/5 14:58
加载中...