Cod sursa(job #1767477)
Utilizator | Data | 29 septembrie 2016 11:21:46 | |
---|---|---|---|
Problema | Potrivirea sirurilor | Scor | 18 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.62 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char a[2000001],b[2000001];
int i,j,k,l[2000001],z,v[1001],t;
void KMP()
{
k=-1;
for(t=0; t<strlen(b); t++)
{
while(k>0 && a[k+1]!=b[t])
k=l[k];
if(a[k+1]==b[t])
k++;
if(k==strlen(a)-1)
{
if(z<1000)
v[++z]=t-k;
k=l[k];
}
}
}
int main()
{
fin>>a>>b;
KMP();
fout<<z<<'\n';
for(i=1; i<=z; i++)
fout<<v[i]<<' ';
return 0;
}