Pagini recente » Cod sursa (job #2132756) | Cod sursa (job #67444) | Cod sursa (job #1076552) | Cod sursa (job #613425) | Cod sursa (job #1377379)
#include <fstream>
#include <string.h>
#include <vector>
#define maxim 2000000
using namespace std;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
char a[maxim+5],b[maxim+5];
int n,m,i,j,k,pr[maxim],nr;
vector<int> rasp;
int main()
{
cin.getline(a+1,maxim); n=strlen(a+1);
cin.getline(b+1,maxim); m=strlen(b+1);
for(i=2; i<=n; i++)
{
while(k && a[k+1]!=a[i])
k=pr[k];
if(a[k+1]==a[i])
k++;
pr[i]=k;
}
k=0;
for(i=1; i<=m; i++)
{
while(k && a[k+1]!=b[i])
k=pr[k];
if(a[k+1]==b[i])
k++;
if(k==n)
{
nr++;
if(nr<=1000)
rasp.push_back(i-n);
}
}
cout<<nr<<"\n";
for(i=0; i<rasp.size(); i++)
cout<<rasp[i]<<" ";
}