Cod sursa(job #1982467)

Utilizator Arsene_DenisaArsene Denisa Arsene_Denisa Data 18 mai 2017 20:52:31
Problema Potrivirea sirurilor Scor 14
Compilator cpp Status done
Runda Arhiva educationala Marime 2.02 kb
#include <iostream>
#include<stdio.h>
#include<string.h>

char s1[2000000], s2[2000000], vp[2000000];

using namespace std;

int main() {
    FILE *fin, *fout;
    int prod, nr, m1, n1, n2, i, f, p, nr1, rrr, x, y, st, nrr;
    char c;

    fin=fopen("strmatch.in", "r");
    fout=fopen("strmatch.out", "w");
    fscanf( fin, "%s", s1);
    n1=strlen(s1);
    fscanf( fin, "%s", s2);
    n2=strlen(s2);
    nrr=0;
    m1=666013;
    nr1=0;
    st=1;
    for(i=0;i<n1;i++) {
      c=s1[i];
       if(c>='a' && c<='z') {
          f=c-'a';
       }
        if(c>='A' && c<='Z') {
            f=c-'A'+26;
        }
        if(c>='0' && c<='9') {
            f=c-'0'+52;
        }
        prod=1;
        for(p=1;p<=(n1-i-1);p++) {
            prod=(prod*62)%m1;
        }
        if(st==1) {
        rrr=prod;
        st=0;
        }
       nr1=(nr1+f*prod)%m1;
    }
    nr=0;
    for(i=0;i<n1;i++) {
      c=s2[i];
       if(c>='a' && c<='z') {
          f=c-'a';
       }
        if(c>='A' && c<='Z') {
            f=c-'A'+26;
        }
        if(c>='0' && c<='9') {
            f=c-'0'+52;
        }
        prod=1;
        for(p=1;p<=(n1-i-1);p++) {
            prod=(prod*62)%m1;
        }
       nr=(nr+f*prod)%m1;
    }
    for(i=n1;i<n2;i++) {
       c=s2[i-n1];
          if(c>='a' && c<='z') {
          x=c-'a';
       }
        if(c>='A' && c<='Z') {
            x=c-'A'+26;
        }
        if(c>='0' && c<='9') {
            x=c-'0'+52;
        }
        c=s2[i];
               if(c>='a' && c<='z') {
          y=c-'a';
       }
        if(c>='A' && c<='Z') {
            y=c-'A'+26;
        }
        if(c>='0' && c<='9') {
            y=c-'0'+52;
        }
        nr=(((nr+m1-x*rrr)*62)%m1+y)%m1;
        if(nr==nr1) {
                nrr++;
                vp[nrr]=i-n1+1;
        }
    }
    fprintf( fout, "%d\n", nrr);
    for(i=1;i<=nrr;i++) {
            fprintf( fout, "%d ", vp[i]);
    }
    fclose( fin );
    fclose( fout );
    return 0;
}