Cod sursa(job #1571961)

Utilizator penetavyPene Cosmin-Octavian penetavy Data 18 ianuarie 2016 17:45:08
Problema Potrivirea sirurilor Scor 14
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#include <string.h>

using namespace std;

FILE *fin = fopen("strmatch.in", "r");
FILE *fout = fopen("strmatch.out", "w");

char s[2000001],s2[2000001], c;
int v[2000000];

int main(){
    int i, j, l, L, prim = 1, p = 0;
    long long hs = 0, hs2 = 0;
    fscanf(fin, "%s", s);
    fscanf(fin, "%c", &c);
    fscanf(fin, "%s", s2);
    l = strlen(s);
    for(i = 0; i < l; i++){
        hs = hs + (prim * s[i]);
        hs2 = hs2 + (prim * s2[i]);
        prim *= 101;
    }
    if(hs == hs2){
        v[p++] = 0;
    }
    prim /= 101;
    L = strlen(s2);
    i = l;
    for(i; i < L; i++){
        hs2 = ((hs2 - s2[i - l]) / 101) + (s2[i] * prim);
        if(hs2 == hs){
            v[p++] = i - l + 1;
        }
    }

    fprintf(fout, "%d\n", p);
    for(i = 0; i < p; i++)
        fprintf(fout, "%d ", v[i]);

    return 0;
}