Pagini recente » Statistici Carja Mihail (carjamihail) | Cod sursa (job #1920546) | Istoria paginii runda/agm2015 | Istoria paginii utilizator/pinzaru_mihaela_324ca | Cod sursa (job #359784)
Cod sursa(job #359784)
#include<fstream.h>
#include<string.h>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int i,q,k,n,m,nr,l,v[1000],urm[2000000];
char P[2000000],T[2000000],aux[2000000];
int main()
{
f.get(T,2000000);
f.get();
f.get(P,2000000);
m=strlen(P);
n=strlen(T);
strcpy(aux," ");
strcat(aux,T);
strcpy(T,aux);
strcpy(aux," ");
strcat(aux,P);
strcpy(P,aux);
urm[1]=0;
k=0;
l=0;
for(q=2;q<=m;q++)
{
while((k>0)&&(P[k+1]!=P[q]))
k=urm[k];
if(P[k+1]==P[q])
k=k+1;
urm[q]=k;
}
q=0;
nr=0;
for(i=1;i<n;i++)
{
while((q>0)&&(P[q+1]!=T[i]))
q=urm[q];
if(P[q+1]==T[i])
q=q+1;
if(q==m)
{
l++;
v[l]=i-m;
q=urm[q];
nr++;
}
}
g<<nr<<'\n';
for(i=1;i<=l;i++)
g<<v[l];
f.close();
g.close();
return 0;
}