#include <iostream> #include <vector> #include <map> #include <cassert> using namespace std; // -1 przegrana // 0 remis // 1 wygrana vector<int> karty_bajtka, karty_bitka; map<pair<int,int>,int> wynik; int ruch_bajtka(); int ruch_bitka(); int ruch_bajtka() { int r; if(karty_bitka.size() == 1) { assert(karty_bajtka.size() == 1); auto w = wynik.find(make_pair(karty_bajtka[0], karty_bitka[0])); r = w == wynik.end() ? 0 : w->second; return r; } r = -2; assert(karty_bitka.size() > 1); for(size_t i=0; i<karty_bitka.size(); i++) { int store = karty_bitka[i]; karty_bitka[i] = karty_bitka.back(); karty_bitka.pop_back(); r = max(r, ruch_bitka()); karty_bitka.push_back(karty_bitka[i]); karty_bitka[i] = store; } return r; } int ruch_bitka() { assert(karty_bajtka.size() > 1); int r = 2; for(size_t i=0; i<karty_bajtka.size(); i++) { int store = karty_bajtka[i]; karty_bajtka[i] = karty_bajtka.back(); karty_bajtka.pop_back(); r = min(r, ruch_bajtka()); karty_bajtka.push_back(karty_bajtka[i]); karty_bajtka[i] = store; } return r; } int main(int argc, char **argv) { ios_base::sync_with_stdio(false); int t; cin >> t; for(; t>0; t--) { int n, m; cin >> n >> m; assert(1 <= n); assert(n <= 100000); assert(1 <= m); assert(m <= 200000); karty_bajtka.resize(n); karty_bitka.resize(n); for(int i=0; i<n; i++) { karty_bajtka[i] = karty_bitka[i] = i+1; } wynik.clear(); for(int i=0; i<m; i++) { int a, b; char w; cin >> a >> w >> b; assert(a > 0); assert(a <= n); assert(w == '<' || w == '>'); assert(b > 0); assert(b <= n); wynik[make_pair(a,b)] = w == '<' ? -1 : 1; } switch(int r = ruch_bajtka()) { case -1: cout << "PRZEGRANA" "\n"; break; case 0: cout << "REMIS" "\n"; break; case 1: cout << "WYGRANA" "\n"; break; default: cout << "BŁĄD " << r << "\n"; break; } } return 0; }
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | #include <iostream> #include <vector> #include <map> #include <cassert> using namespace std; // -1 przegrana // 0 remis // 1 wygrana vector<int> karty_bajtka, karty_bitka; map<pair<int,int>,int> wynik; int ruch_bajtka(); int ruch_bitka(); int ruch_bajtka() { int r; if(karty_bitka.size() == 1) { assert(karty_bajtka.size() == 1); auto w = wynik.find(make_pair(karty_bajtka[0], karty_bitka[0])); r = w == wynik.end() ? 0 : w->second; return r; } r = -2; assert(karty_bitka.size() > 1); for(size_t i=0; i<karty_bitka.size(); i++) { int store = karty_bitka[i]; karty_bitka[i] = karty_bitka.back(); karty_bitka.pop_back(); r = max(r, ruch_bitka()); karty_bitka.push_back(karty_bitka[i]); karty_bitka[i] = store; } return r; } int ruch_bitka() { assert(karty_bajtka.size() > 1); int r = 2; for(size_t i=0; i<karty_bajtka.size(); i++) { int store = karty_bajtka[i]; karty_bajtka[i] = karty_bajtka.back(); karty_bajtka.pop_back(); r = min(r, ruch_bajtka()); karty_bajtka.push_back(karty_bajtka[i]); karty_bajtka[i] = store; } return r; } int main(int argc, char **argv) { ios_base::sync_with_stdio(false); int t; cin >> t; for(; t>0; t--) { int n, m; cin >> n >> m; assert(1 <= n); assert(n <= 100000); assert(1 <= m); assert(m <= 200000); karty_bajtka.resize(n); karty_bitka.resize(n); for(int i=0; i<n; i++) { karty_bajtka[i] = karty_bitka[i] = i+1; } wynik.clear(); for(int i=0; i<m; i++) { int a, b; char w; cin >> a >> w >> b; assert(a > 0); assert(a <= n); assert(w == '<' || w == '>'); assert(b > 0); assert(b <= n); wynik[make_pair(a,b)] = w == '<' ? -1 : 1; } switch(int r = ruch_bajtka()) { case -1: cout << "PRZEGRANA" "\n"; break; case 0: cout << "REMIS" "\n"; break; case 1: cout << "WYGRANA" "\n"; break; default: cout << "BŁĄD " << r << "\n"; break; } } return 0; } |