Ranking (as of 2013-10-06): 108 out of 736
Language: C++
/*
UVa 162 - Beggar My Neighbour
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_162_Beggar_My_Neighbour.cpp
*/
#include <list>
#include <cstdio>
using namespace std;
int face_card(char c)
{
switch (c) {
case 'J':
return 1;
case 'Q':
return 2;
case 'K':
return 3;
case 'A':
return 4;
default:
return 0;
}
}
int play(int nc, list<char>& player, list<char>& played)
{
if (!nc)
nc = 1;
while (nc--) {
if (player.empty())
return -1;
char c = player.front();
player.pop_front();
played.push_back(c);
int fc = face_card(c);
if (fc)
return fc;
}
return 0;
}
int main()
{
const int nr_cards = 52;
while (true) {
list<char> players[2], played;
// players[0] is the non-dealer, players[1] is the dealer
char card[2 + 1];
scanf("%s", card);
if (card[0] == '#')
break;
players[0].push_front(card[1]);
for (int i = 1; i < nr_cards; i++) {
scanf("%s", card);
players[i % 2].push_front(card[1]);
}
bool done = false;
int pi = 0, nc = 0;
while (true) {
int fc = play(nc, players[pi], played);
pi = (pi + 1) % 2;
if (fc == -1)
break;
if (!fc && nc)
players[pi].splice(players[pi].end(), played);
nc = fc;
}
printf("%d%3d\n", 2 - pi, static_cast<int>(players[pi].size()));
}
return 0;
}
No comments:
Post a Comment