求助!!!
查看原帖
求助!!!
1365062
Deric456楼主2025/8/4 09:07
#include <bits/stdc++.h>
#define bas 917
#define mod 899678209
using namespace std;
typedef long long ll;
ll n,m,n1,n2,h1[200000],h2,f[2][200000],ans;
string str;
int main() {
	cin>>str;
	str=" "+str;
	n1=str.size()-1; 
	for(int i=1;i<=n1;++i) h1[i]=(h1[i-1]*bas+str[i]-'a'+1)%mod;
	cin>>str;
	str=" "+str; 
	n2=str.size()-1;
	ll pw=1;
	for(int i=1;i<=n2;++i) {
		h2=(h2*bas+str[i]-'a'+1)%mod;
		pw=pw*bas%mod;
	}
	for(int i=n2;i<=n1;++i)
		if(((h1[i]-h1[i-n2]*pw)%mod+mod)%mod==h2)
			++n,i+=n2-1;
	ll l=1,r=n,mid;
	while(r-l>1) {
		mid=l+r>>1;
		if((mid*(mid+1)>>1)<=n)l=mid;
		else r=mid;
	}
	m=l;
	if((m*(m+1)>>1)<n) ++m;
	f[0][0]=1;
	for(int i=1;i<=m;++i) {
		ll x=i&1,y=x^1;
		for(int j=0;j<=n;++j){
			if(i>j) f[x][j]=0;
			else f[x][j]=(f[y][j-i]+f[x][j-i])%mod;
		}
		if(i!=1)for(int j=n-i+1;j<=n;++j)ans+=f[x][j],ans%=mod;
	}
	printf("%lld",ans);
}

为啥只得100分?

(有没有数据范围是3e5的题?)
2025/8/4 09:07
加载中...