Pagini recente » Cod sursa (job #116032) | Cod sursa (job #1684589) | Cod sursa (job #3144020) | Cod sursa (job #2048261) | Cod sursa (job #2851549)
#include <iostream>
#include <fstream>
#include <list>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
list <int> l;
char a[1000000];
int v[1000000];
int main() {
char c;
int i = 0,j=0;
fin.get(a[i]);
while (true){
i++;
fin.get(a[i]);
if(a[i]=='\n')
break;
if(a[i]==a[j])
v[i]=++j;
else{
while(j!=0 && a[i]!=a[j] )
j=v[j];
if(a[i]==a[j])
v[i]=++j;
else
v[i]=0;
}
}
int ct=0, n=i, poz=0;
i=0;
fin.get(c);
while (c!='\n' && !fin.eof()){
if(a[i] == c)
i++;
else
i -= v[i];
if(i == n){
ct++;
if(ct <= 1000)
l.push_back(poz-i+1);
i = v[i-1];
}
fin.get(c);
poz++;
}
fout<<ct<<"\n";
_List_iterator<int> it;
for(it = l.begin(); it != l.end(); it++)
fout<<(*it)<<" ";
return 0;
}