Pagini recente » Cod sursa (job #2745246) | Cod sursa (job #730081) | Cod sursa (job #573558) | Cod sursa (job #2835828) | Cod sursa (job #1940834)
#include<vector>
#include<fstream>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char c,a[2000002],b[2000002];
int m,n, sol ,ok, p[2000002],i, v[1005];
int main()
{
while(fin.get(c)&&c!='\n')
{
a[++m]=c;
}
while(fin.get(c))
{
b[++n]=c;
}
n--;
for(i=2;i<=m;i++)
{
while(ok!=0&&a[i]!=a[ok+1])
ok=p[ok];
if(a[i]==a[ok+1])
ok++;
p[i]=ok;
}
ok=0;
for(i=1;i<=n;i++)
{
while(ok!=0&&b[i]!=a[ok+1])
ok=p[ok];
if(b[i]==a[ok+1])
ok++;
if(ok==m)
{
sol++;
if(sol<=1000)
v[sol]=i-m;
ok=p[ok];
}
}
fout<<sol<<"\n";
for(i=1;i<=sol&&i<=1000;i++)
fout<<v[i]<<" ";
fin.close();
fout.close();
return 0;
}