Cod sursa(job #2294185)

Utilizator canmihaiCancescu Mihai canmihai Data 2 decembrie 2018 00:27:13
Problema Potrivirea sirurilor Scor 38
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <string.h>
#include<stdio.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char v1[2000010],v2[2000010];
int n,m=1,p=1,sum,valori[10000],s[2000010],sol[1010],nrs=1;
int main(){
    fin>>v1;
    n=strlen(v1);
    //m=strlen(v2);
    for(int i=0;i<n;i++){
        if(valori[v1[i]-'0']==0){
            valori[v1[i]-'0']=p;
            sum+=p;
            p++;
        }
        else
            sum+=valori[v1[i]-'0'];
    }
    while(fin>>v2[m]){
        if(valori[v2[m]-'0']!=0)
            s[m]=s[m-1]+valori[v2[m]-'0'];
        else
            s[m]=0;
        m++;
    }
    for(int i=1;i<=m-n;i++){
        if(s[i]!=0)
            if(s[i+n-1]-s[i]+1==sum){
                int q=1;
                for(int j=0;j<m;j++)
                    if(v2[i+j]==v1[j])
                        q++;
                    else
                        break;
                if(q-1==n && nrs<=1000){
                    sol[nrs]=i-1;
                    nrs++;
                }
                if(q-1==n && nrs>1001)
                    nrs++;
            }

    }
    fout<<nrs-1<<"\n";
    for(int i=1;i<nrs;i++)
        fout<<sol[i]<<" ";



    return 0;
}