#include<bits/stdc++.h>
#define ll long long
#define int long long
#define endl "\n"
#define P pair<int,int>
#define f first
#define s second
using namespace std;
typedef unsigned long long ull;
const int maxn=200010;
const int inf=0x3f3f3f3f;
const int mod=998244353;
int t;
int n,m,k;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
string s1,ss;
cin>>s1>>ss;
int m=ss.length();
ss=ss+'#'+s1;
int len=ss.length();
vector<int> nxt(len,0);
for(int i=1,j=0;i<len;i++)
{
while(j>0&&ss[i]!=ss[j])
j=nxt[j-1];
nxt[i]=(ss[i]==ss[j]?++j:j);
}
cout<<count(nxt.begin(),nxt.end(),m)<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000010;
string p,ss;//ss是主串,p是子串
int pmt[maxn];
void getpmt()
{
memset(pmt,0,sizeof pmt);
int len=p.length();
for (int i = 1, j = 0; i < len; i++)
{
while (j >= 0 && p[i] != p[j])
j = (j ? pmt[j - 1] : -1);
if (j >= 0 && p[i + 1] == p[j + 1])
pmt[i] = pmt[j++];
else
pmt[i] = ++j;
}
}
int main()
{
cin>>ss>>p;
getpmt();
int n=ss.length(),m=p.length();
int ans = 0;
for (int i = 0, j = 0; i < n; i++)
{
while (j >= 0 && ss[i] != p[j])
j = (j ? pmt[j - 1] : -1);
j++;
if (j == m)
{
ans++;
j = pmt[j - 1];
}
}
cout<<ans<<endl;
return 0;
}
#include<bits/stdc++.h>using namespace std;const int maxn=1000010;string p,ss;//ss是主串,p是子串int pmt[maxn];void getpmt(){ memset(pmt,0,sizeof pmt); int len=p.length(); for (int i = 1, j = 0; i < len; i++) { while (j &...