Cod sursa(job #2891327)

Utilizator RobertuRobert Udrea Robertu Data 18 aprilie 2022 11:18:57
Problema NFA Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <string>
#define dim 99999
using namespace std;

ifstream fin("nfa.in");
ofstream fout("nfa.out");

// vector<int> stariFin; 
int stariFin[99999], sf = 0;
vector<string> cuvinte;

struct Muchie {
    int vecin;
    char lit;
};
vector< vector<Muchie> > v(dim);

int n;

bool ok;

void Verificare(string cuvant, int start, int index) {
    if( !ok ) {
        if(index < cuvant.length()) 
        for(int i = 0; i < v[start].size() && !ok; i++) 
            if( v[start][i].lit == cuvant[index] ) 
                Verificare(cuvant, v[start][i].vecin, index + 1);

        if(cuvant.length() == index) {
            for(int i = 0; i < sf && !ok; i++)
                if(start == stariFin[i]) {
                    ok = true;
                    fout << 1 << '\n';
                    break;
                }
        }
    }
}

int main() {
    int m, x, y, S, nrF, nrCuv;
    char l;
    int stare;
    string cuvant;

    fin >> n >> m >> nrF >> S;

    for(int i = 0; i < nrF; i++) {
        fin >> stare;
        stariFin[sf++] = stare;
    }

    Muchie tranzitie;
    for(int i = 0; i < m; i++) {
        fin >> x >> y >> l;

        tranzitie.vecin = y;
        tranzitie.lit = l;

        v[x].push_back(tranzitie);
    }

    fin >> nrCuv;
    for(int i = 0; i < nrCuv; i++) {
        fin >> cuvant;
        
        ok = false;
        Verificare(cuvant, S, 0);

        if( !ok )
            fout << 0 << '\n';
    }

    return 0;
}