#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分?