Pagini recente » Cod sursa (job #2596752) | Cod sursa (job #1249472) | Cod sursa (job #1903106) | Cod sursa (job #559051) | Cod sursa (job #907228)
Cod sursa(job #907228)
#include <stdio.h>
#include <string.h>
#include <list>
using namespace std;
#define Nmax 2000007
char A[Nmax], B[Nmax];
int n, m, sol, nrsol;
int pi[Nmax];
list <int> poz;
void read(){
A[0] = ' ';
B[0] = ' ';
fgets(A+1, Nmax, stdin);
fgets(B+1, Nmax, stdin);
n = strlen(A);
m = strlen(B);
--n, --m;
A[n] = '\000';
--n;
fclose(stdin);
}
void kmp(){
int k = 1;
char* pozz;
while( (pozz = strstr(B+k, A+1)) ){
k = ( pozz - B );
++sol;
if(nrsol < 1000){
++nrsol;
poz.push_back(k - 1);
}
k++;
}
printf("%i\n", sol);
list <int>::iterator it, last;
it = poz.begin();
last = poz.end();
for(; it != last; ++it)
printf("%i ", *it);
printf("\n");
fclose(stdout);
}
int main(){
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
read();
kmp();
return 0;
}