Pagini recente » Cod sursa (job #521817) | Cod sursa (job #2846611) | Cod sursa (job #535937) | Cod sursa (job #1351217) | Cod sursa (job #1843980)
#include <bits/stdc++.h>
using namespace std;
ifstream inf("strmatch.in");
ofstream outf("strmatch.out");
string a="*", b="*", c;
int i, la, lb, q, sol, p[2000010];
vector<int> v;
int main()
{
inf>>c;la=c.size();
a=a+c;
a=a+b;
inf>>c;lb=c.size();
b=b+c;
for(i=2; i<=la; i++)
{
while(q&&(a[q+1]!=a[i]))q=p[q];
if(a[q+1]==a[i])
q++;
p[i]=q;
}
for(i=1,q=0; i<=lb; i++)
{
while(q&&(a[q+1]!=b[i]))q=p[q];
if(a[q+1]==b[i])
q++;
if(q==la)
{
sol++;
if(sol<=1000)
v.push_back(i-la);
}
}
outf<<sol<<'\n';
for(auto it:v)
outf<<it<<' ';
outf<<'\n';
return 0;
}