Il Sarcofago Nero può assumere N configurazioni al suo interno, numerate da 1 a N. La parola segreta viene accettata se raggiunge la configurazione finale (avente numero N) a partire dalla configurazione iniziale (avente numero 1) dopo aver letto tutte le lettere in S una alla volta. Per ogni configurazione I del Sarcofago Nero, la tripletta (I,J,c) indica che la lettera c lo fa transitare dalla configurazione I alla configurazione J.
L'esercito rivale ha carpito una parola segreta S, ma non sa se è quella del Sarcofago Nero. Il tuo compito è quello di trovare la configurazione interna Q che esso raggiunge, dopo aver letto S, a partire dalla configurazione iniziale.
Dati di input
Il file input.txt è composto da M+2 righe. La prima riga contiene tre interi positivi separati da uno
spazio, che rappresentano il numero M delle triplette, il numero N di configurazioni e il numero K di
lettere nella sequenza S. La seconda riga contiene K lettere separate da uno spazio, le quali formano la
sequenza S. Ciascuna delle rimanenti M righe contiene due interi positivi I e J e una lettera c, separati da una spazio, che rappresentano la tripletta (I,J,c) per la transizione del Sarcofago Nero.
Dati di output
Il file output.txt è composto da una sola riga contenente il numero Q della configurazione raggiunta
dal Sarcofago Nero a partire dalla sua configurazione iniziale (avente numero 1), dopo aver letto tutta la
sequenza S.
Assunzioni
2 ≤ M ≤ 100.
2 ≤ N ≤ 100.
2 ≤ K ≤ 10.
1 ≤ Q ≤ N.
Esempi di input/output
File input.txt File output.txt
5 3 6 2
a a a b a b
1 3 a
1 2 b
2 1 a
3 2 b
3 3 a
Niente di più facile che modificare una variabile <Q> in base alle istruzioni memorizzate in un vettore trami te coppi char-int:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include<cstdlib> #include<iostream> #include<fstream> #include<vector> #define K 10 #define N 100 using namespace std; ifstream in; ofstream out; typedef pair<char,int> ci; int m,n,k,q=1,t1,t2; char s[K],t3; vector<ci> ijc [N+1]; int main(){ in.open("input.txt"); out.open("output.txt"); in>>m>>n>>k; for (int i=0;i<k;i++) in>>s[i]; for (int i=0;i<m;i++){ in>>t1>>t2>>t3; ijc[t1].push_back(ci(t3,t2));} for (int i=0;i<k;i++) for (int j=0; j< ijc[q].size();j++) if (ijc[q][j].first ==s[i]) q= ijc[q][j].second; out<<q; return 0;} |
Nessun commento:
Posta un commento
Si prega di non commentare in modo volgare e/o offensivo.