Cod sursa(job #1571804)

Utilizator penetavyPene Cosmin-Octavian penetavy Data 18 ianuarie 2016 15:29:32
Problema Potrivirea sirurilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 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);
    l = strlen(s);
    for(i = 0; i < l; i++){
        hs = hs + (prim * s[i]);
        prim *= 101;
    }

    fscanf(fin, "%s", s2);
    L = strlen(s2) - l + 1;

    for(i = 0; i < L; i++){
        if(s[0] == s2[i]){
            hs2 = 0;
            prim = 1;
            for(j = 0; j < l; j++){
                hs2 = hs2 + (prim * s2[i + j]);
                prim *= 101;
            }
            printf("%d ", hs2);
            if(hs == hs2){
                v[p++] = i;
            }
        }
    }

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

    return 0;
}