Cod sursa(job #1399731)

Utilizator CosminAlexCojocaruCojocaru Cosmin CosminAlexCojocaru Data 24 martie 2015 21:36:17
Problema Potrivirea sirurilor Scor 18
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
int i,m,p[2000000],q,n,c,u,j[2000000],nr;
string sir,subsir;
char a,v[2000000],v1[2000000];
void prelucrare()
{
    q=0;
    p[1]=0;
    for(i=2;i<=m+1;++i)
    {
        while(q && v1[q+1]!=v[i])
            q=p[q];
        if(v1[q+1]==v[i])
            q++;
        p[i]=q;


    }

}
void citire()
{   /*f>>n;
    for(i=1;i<=n;i++)
    {
        f>>v1[i];

    }
    f>>m;
    for(i=1;i<=m;i++)
    {
        f>>v[i];

    }*/
    getline(f,subsir);
    getline(f,sir);
    n=subsir.length();
    m=sir.length();
    for(i=1;i<=m+1;++i)
    {
        v1[i]=subsir[i-1];
        v[i]=sir[i-1];
    }
}
void scriere()
{
    for(i=1;i<=m+1;i++)
        if(p[i]==n) c++;
}
void partea_a_2_a()
{
    for(i=1;i<=m+1;i++)
        if(p[i]==n && ++nr<1000) g<<i-n<<" ";

}
int main()
{

   citire();
   prelucrare();
   scriere();


    g<<c;
    g<<endl;
    partea_a_2_a();
}