#include <iostream>
#include <sstream>
#include <bitset>
using namespace std;
class Player
{
public:
Player(int numOfDecks)
: m_decksInPlay(numOfDecks)
{
for (int i = 0; i < numOfDecks; ++i)
{
drawDecks[0].set(i);
drawDecks[1].set(i);
}
}
void Win(int a, int b)
{
winningDecks[0].set(a - 1);
drawDecks[0].reset(a - 1);
loosingDecks[1].set(b - 1);
drawDecks[1].reset(b - 1);
}
void Loose(int a, int b)
{
loosingDecks[0].set(a - 1);
drawDecks[0].reset(a - 1);
winningDecks[1].set(b - 1);
drawDecks[1].reset(b - 1);
}
std::string Result()
{
std::string result;
if ((loosingDecks[0].count() >= m_decksInPlay) || (winningDecks[1].count() >= m_decksInPlay))
result = "PRZEGRANA";
else if ((drawDecks[0].count() > 0) || /* (drawDecks[1].count() > 0) || */ (winningDecks[0].count() == winningDecks[1].count()))
result = "REMIS";
else if ((winningDecks[0].count() >= m_decksInPlay) || (loosingDecks[1].count() >= m_decksInPlay))
result = "WYGRANA";
//else
#if 0
{
std::ostringstream uncertainity;
uncertainity << " D0 = " << drawDecks[0].count() << " W0 = " << winningDecks[0].count() << " L0 = " << loosingDecks[0].count()
<< " D1 = " << drawDecks[1].count() << " W1 = " << winningDecks[1].count() << " L1 = " << loosingDecks[1].count();
result.append(uncertainity.str());
}
#endif
return result;
}
private:
using deck = std::bitset<100000>;
int m_decksInPlay;
deck drawDecks[2];
deck winningDecks[2];
deck loosingDecks[2];
};
int main()
{
int tests = 0;
std::cin >> tests;
for (int i = 0; i < tests; ++i)
{
int decks, pairs;
std::cin >> decks >> pairs;
Player player(decks);
for (int z = 0; z < pairs; ++z)
{
int a, b;
char c;
std::cin >> a >> c >> b;
switch (c)
{
case '>':
player.Win(a, b);
break;
case '<':
player.Loose(a, b);
break;
default:
break;
}
}
std::cout << player.Result() << std::endl;
}
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 | #include <iostream> #include <sstream> #include <bitset> using namespace std; class Player { public: Player(int numOfDecks) : m_decksInPlay(numOfDecks) { for (int i = 0; i < numOfDecks; ++i) { drawDecks[0].set(i); drawDecks[1].set(i); } } void Win(int a, int b) { winningDecks[0].set(a - 1); drawDecks[0].reset(a - 1); loosingDecks[1].set(b - 1); drawDecks[1].reset(b - 1); } void Loose(int a, int b) { loosingDecks[0].set(a - 1); drawDecks[0].reset(a - 1); winningDecks[1].set(b - 1); drawDecks[1].reset(b - 1); } std::string Result() { std::string result; if ((loosingDecks[0].count() >= m_decksInPlay) || (winningDecks[1].count() >= m_decksInPlay)) result = "PRZEGRANA"; else if ((drawDecks[0].count() > 0) || /* (drawDecks[1].count() > 0) || */ (winningDecks[0].count() == winningDecks[1].count())) result = "REMIS"; else if ((winningDecks[0].count() >= m_decksInPlay) || (loosingDecks[1].count() >= m_decksInPlay)) result = "WYGRANA"; //else #if 0 { std::ostringstream uncertainity; uncertainity << " D0 = " << drawDecks[0].count() << " W0 = " << winningDecks[0].count() << " L0 = " << loosingDecks[0].count() << " D1 = " << drawDecks[1].count() << " W1 = " << winningDecks[1].count() << " L1 = " << loosingDecks[1].count(); result.append(uncertainity.str()); } #endif return result; } private: using deck = std::bitset<100000>; int m_decksInPlay; deck drawDecks[2]; deck winningDecks[2]; deck loosingDecks[2]; }; int main() { int tests = 0; std::cin >> tests; for (int i = 0; i < tests; ++i) { int decks, pairs; std::cin >> decks >> pairs; Player player(decks); for (int z = 0; z < pairs; ++z) { int a, b; char c; std::cin >> a >> c >> b; switch (c) { case '>': player.Win(a, b); break; case '<': player.Loose(a, b); break; default: break; } } std::cout << player.Result() << std::endl; } return 0; } |
English