Pagini recente » Cod sursa (job #508723) | Cod sursa (job #1806937) | Cod sursa (job #558839) | Cod sursa (job #651440) | Cod sursa (job #2017858)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char a[2000010],b[2000010];
int n1,n2,fr[200],integer,c[2000010],aux,i,solve[1001],poz;
int main()
{
for (i=1;i<=199;i++) fr[i]=-1;
f.getline (a,2000010);
f.getline (b,2000010);
n1=strlen (a)-1;
n2=strlen (b)-1;
for (i=1;i<=n1;i++)
{
aux=c[i-1];
if (a[i]==a[aux]) {c[i]=c[i-1]+1;}
}
poz=0;
int countdown=0;
int i=-1;
for (i=0;i<=n2;i++)
{
if (b[i]==a[poz]) {poz++; if (poz>n1) {poz=c[poz-1]; countdown++; if (countdown<=1000) {solve[countdown]=i-n1;} } }
else poz=c[poz];
}
g<<countdown<<"\n";
for (i=1;i<=min(countdown,1000);i++) g<<solve[i]<<" ";
return 0;
}