Pagini recente » Cod sursa (job #1128750) | Monitorul de evaluare | Cod sursa (job #1076492) | Cod sursa (job #2060487) | Cod sursa (job #1981741)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string str;
char s[4000005];
int z[4000005];
int i,j,k,l,r,ans[1005],len,lenmx;
int main()
{
ifstream f("strmatch.in");
ofstream g("strmatch.out");
f>>str;len=str.size();
for(i=0;i<str.size();i++)
{
s[i]=str[i];
}
f>>str;
for(i=0;i<str.size();i++)
{
s[len+i]=str[i];
}
lenmx=len+str.size();
for(i=1;i<lenmx;i++)
{
if(i>r) j=0;
else j=min(z[i-l],r-i);
while(i+j<lenmx&&s[i+j]==s[j])
j++;
j--;
z[i]=j;
if(i+j>r)
l=i,r=i+j;
if(j>=len-1&&i>=len)
{
k++;
if(k<=1000)
ans[k]=i-len;
}
}
g<<k<<'\n';
for(i=1;i<=min(1000,k);i++)
g<<ans[i]<<' ';
return 0;
}