Letöltés: mb_varazslat.cpp #include "stdafx.h" #include <cstdlib> #include <cstdio> #include <list> #include <vector> using namespace std; int db; int c, d, n; char comb1 [200]; char comb2 [200]; char comb3 [200]; char op1[200]; char op2[200]; char str[200]; char tmp; int _tmain() { FILE* reader = fopen("input.txt", "r"); FILE* printer = fopen("output.txt", "w"); fscanf(reader, "%d", &db); for(int i=0; i<db; i++) { //printf("Doing #%d\n", i); fscanf(reader, "%d%c", &c, &tmp); for(int j=0; j<c; j++) fscanf(reader, "%c%c%c%c", &comb1[j], &comb2[j], &comb3[j], &tmp); fscanf(reader, "%d%c", &d, &tmp); for(int j=0; j<d; j++) fscanf(reader, "%c%c%c", &op1[j], &op2[j], &tmp); fscanf(reader, "%d%c", &n, &tmp); for(int j=0; j<n; j++) fscanf(reader, "%c", &str[j]); vector<char> l; for(int j=0; j<n; j++) { l.push_back(str[j]); bool cont = true; while(cont) { cont = false; if(l.size()>=2) { char c1=l[l.size()-1]; char c2=l[l.size()-2]; for(int k=0; k<c; k++) if((comb1[k] == c1 && comb2[k] == c2) || { cont=true; l.pop_back(); l.pop_back(); l.push_back(comb3[k]); //printf("comb (%c %c => %c)", comb1[k], comb2[k], comb3[k]); break; } } } if(l.size()>=2) { char c1, c2; for(int k1=0; k1<l.size(); k1++) for(int k2=0; k2<l.size(); k2++) if(k1!=k2) { c1=l[k1]; c2=l[k2]; for(int k=0; k<d; k++) if((op1[k] == c1 && op2[k] == c2) || { l.clear(); //printf("op (%c %c)", c1, c2); break; } } } } printf("Case #%d: ", i+1); for(int j=0; j<l.size(); j++) printf("%c", l[j]); printf("\n"); } fclose(printer); fclose(reader); scanf("%d", db); return 0; } |