Cod sursa(job #1605008)

Utilizator enacheionutEnache Ionut enacheionut Data 18 februarie 2016 18:44:19
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

string A, B, aux;
unsigned int lengthA, lengthB;
int pi[10005];

void prefix()
{
    int i, q=0;

    for( i=2, pi[1] = 0; i<=aux.size(); ++i )
    {
        while( q && aux[q+1] != aux[i] )
        {
            q = pi[q];
        }
        if( aux[q+1] == aux[i] )
        {
            ++q;
        }
        pi[i] = q;
    }
}


int main()
{
    int poz, i, left, right, q  = 0;
    ifstream in("potrivire.in");
    in >> lengthA >> lengthB >> A >> B;
    in.close();

    for (i = lengthA; i; i--){
        A[i] = A[i-1];
    }
    A[0] = ' ';

    prefix();

    poz = B.find('*');
    aux = B.substr(0,poz);

    for (i = aux.size(); i; i--){
        aux[i] = aux[i-1];
    }
    aux[0] = ' ';

    for (i = 1; i <= lengthA; i++){
        while (q && aux[q+1] != A[i]){
            q = pi[q];
        }
        if (aux[q+1] == A[i]){
            q++;
        }
        if (q == aux.size()-1){
            q = pi[aux.size()-1];
            left = i-aux.size()-1;
            break;
        }
    }

    cout<<left<<endl;


//
//    ofstream out("potrivire.out");
//    out<<prim<<" "<<ultim;
//    out.close();

    return 0;
}