Cod sursa(job #1341073)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 12 februarie 2015 13:14:50
Problema Potrivirea sirurilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream>
#include<cstring>
using namespace std;
int n, m, i, L, nr;
int p[2000001], p1[2000001], v[2001];
char a[2000001], b[2000001];
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int main(){
    fin>> a + 1;
    n = strlen(a + 1);
    p[1] = 0;
    for(i = 2; i <= n; i++){
        while(a[i] != a[L+1] && L != 0){
            L = p[L];
        }
        if(a[i] == a[L+1]){
            L++;
        }
        p[i] = L;
    }
    fin>> b + 1;
    m = strlen(b + 1);
    L = 0;
    for(i = 1; i <= m; i++){
        while(b[i] != a[L+1] && L != 0){
            L = p[L];
        }
        if(b[i] == a[L+1]){
            L++;
        }
        if(L == n){
            nr++;
            L = p[L];
            if(nr <= 1000){
                v[nr] = i - n;
            }
        }
    }
    fout<< nr <<"\n";
    for(i = 1; i <= nr && i <= 1000; i++){
        fout<< v[i] <<" ";
    }
    return 0;
}