Cod sursa(job #3255468)

Utilizator DragosDavidDavid Dragos Nicolae DragosDavid Data 10 noiembrie 2024 17:47:07
Problema Potrivirea sirurilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <bits/stdc++.h>
#include <sstream>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int v[123123];
int q[123123];
std::multiset<std::string> dv;
void build(string x){
    int i =1;
    v[0]=0;
    int j =0;
    while(i<x.length()){
            if(x[i]==x[j]){
                v[i++]=++j;

            }
            else{
                if(v[j]!=0){
                    j=v[j-1];
                }
                else{
                        v[i]=0;
                    i++;
                }
            }

    }

}
void solve(string x,string y){
    int i =0 ;
    int j = 0;
    while(i<y.length()){
        if(y[i]==x[j]){
            i++;
            j++;
            if(j==x.length()){
                    fout<<i-j<<" ";
                j=v[j-1];
            }

        }
        else{
            if(j!=0){
                j=v[j-1];
            }
            else{
                i++;
            }
        }
    }


}
int main()
{
    int n;

    string pedo;
    string hamas;
    getline(fin,pedo);
    getline(fin,hamas);
    build(pedo);
    solve(pedo,hamas);


    return 0;
}