Pagini recente » Cod sursa (job #729934) | Cod sursa (job #2784563) | Cod sursa (job #3225775) | monthly-2014/runda-8/solutii | Cod sursa (job #3163500)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
#define MaxL 2000000
int p[MaxL*2+2];
char s[MaxL*2+2], t[MaxL];
int main()
{
ifstream in("strmatch.in");
ofstream out("strmatch.out");
int i, n, res, k=0, cnt=0, cnt2=0;
char ch;
in>>s;
cnt=strlen(s);
s[cnt]='*';
s[cnt+1]='\0';
in>>t;
strcat(s, t);
for(i=1; i<strlen(s); i++)
{
while(k!=0 && s[k]!=s[i])
{
k=p[k-1];
}
if(s[k]==s[i]){k++;}
p[i]=k;
if(p[i]==cnt)
{
cnt2++;
}
}
out<<cnt2<<'\n';
cnt2=0;
for(i=1; i<strlen(s); i++)
{
if(p[i]==cnt)
{
cnt2++;
if(cnt2<=1000)
out<<i-2*cnt<<" ";
else break;
}
}
return 0;
}