// @BEGIN_OF_SOURCE_CODE /* @JUDGE_ID: 17243NT 173 C++ "Paskill can trap AND annihilate; trap takes one unit of time" */ // Send to judge@uva.es #include #include #ifdef ONLINE_JUDGE #define ins cin #define outs cout #else #define ins fin #define outs fout ifstream fin("myprog.in"); ofstream fout("myprog.out"); #endif bool adj[27][27]; bool vl[27]; bool vp[27]; bool trappas(int p) { int i; for(i = (p + 1) % 27; i != p; i = (i + 1) % 27) if(adj[p][i] && !vl[i] && !vp[i]) return false; return true; } bool traplisp(int l) { int i; for(i = (l + 26) % 27; i != l; i = (i + 26) % 27) if(adj[l][i] && !vl[i]) return false; return true; } int nextpas(int p) { int i; for(i = (p + 1) % 27; i != p; i = (i + 1) % 27) if(adj[p][i] && !vl[i] && !vp[i]) break; return i; } int nextlisp(int l) { int i; for(i = (l + 26) % 27; i != l; i = (i + 26) % 27) if(adj[l][i] && !vl[i]) break; return i; } int main() { char c, d; int i, j; int lisper, paskill; bool trapa, trapb; for(;;) { ins >> c; if(c == '#') break; ins.putback(c); for(i = 0; i < 27; i++) { vl[i] = false; vp[i] = false; for(j = 0; j < 27; j++) adj[i][j] = false; } do { ins >> c; ins >> d; do { ins >> d; if(d == ';' || d == '.') break; adj[c - 'A'][d - 'A'] = true; adj[d - 'A'][c - 'A'] = true; } while(d >= 'A' && d <= 'Z'); } while(d != '.'); ins >> c >> d; paskill = c - 'A'; lisper = d - 'A'; trapa = trapb = true; for(;;) { bool eventoccur = false; vl[lisper] = true; vp[paskill] = true; if(trappas(paskill)) { if(trapa) { trapa = false; } else { if(eventoccur) outs << " "; eventoccur = true; outs << "Paskill trapped in node " << (char) ('A' + paskill); } } if(traplisp(lisper)) { if(trapb) { trapb = false; } else { if(eventoccur) outs << " "; eventoccur = true; outs << "Lisper trapped in node " << (char) ('A' + lisper); } } if(lisper == paskill) { if(eventoccur) outs << " "; eventoccur = true; outs << "Both annihilated in node " << (char) ('A' + lisper); } else if(vp[lisper]) { if(eventoccur) outs << " "; eventoccur = true; outs << "Lisper destroyed in node " << (char) ('A' + lisper); } if(eventoccur) break; lisper = nextlisp(lisper); paskill = nextpas(paskill); } outs << endl; } return 0; } // @END_OF_SOURCE_CODE