martedì 1 aprile 2014

[C++] Eserciti Galattici

L'esercito della Signoria è riuscito a costruire un'arma segreta: il temibile Sarcofago Nero. Esso legge una parola segreta S costituita da lettere minuscole dell'alfabeto: a, b, c, ..., z (ogni lettera può comparire zero, una o più volte).
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.