Thứ Ba, 8 tháng 1, 2019

UVa 00162 - Beggar My Neighbour (card game simulation; straightforward)

Link:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=98
Sol:
#include <cstdio>
#define currentCard cardValues[cPlayer][spotIn[cPlayer]]
// Player is at the top of the deck. Stack is at next space to be added to.
char cardValues[2][52], stack[52], temp;
int numCards[2], spotIn[2], stackNum, stackSpot, cPlayer;
int failedToPlay;
// Returns true if callee should get all cards
bool HandleCheck(int tNum)
{
bool returnV(true);
cPlayer = 1 - cPlayer;
for (int i = 0; i < tNum; ++i)
{
if (numCards[cPlayer] == 0)
{
failedToPlay = cPlayer;
return false;
}
int num;
switch (currentCard)
{
case 'J':
num = 1;
break;
case 'Q':
num = 2;
break;
case 'K':
num = 3;
break;
case 'A':
num = 4;
break;
default:
num = 0;
}
stack[stackSpot] = currentCard;
stackSpot = (stackSpot + 1) % 52;
++stackNum;
--numCards[cPlayer];
spotIn[cPlayer] = (spotIn[cPlayer] + 1) % 52;
if (num)
{
returnV = false;
if (!HandleCheck(num))
break;
else
{
cPlayer = 1 - cPlayer;
int tempSpotP = (spotIn[cPlayer] + numCards[cPlayer]) % 52;
int tempSpotS = (stackSpot - stackNum + 52) % 52;
numCards[cPlayer] += stackNum;
while (stackNum--)
{
cardValues[cPlayer][tempSpotP] = stack[tempSpotS++];
++tempSpotP;
if (tempSpotP == 52)
tempSpotP = 0;
if (tempSpotS == 52)
tempSpotS = 0;
}
stackNum = stackSpot = 0;
i = -1;
tNum = 1;
}
}
}
return returnV;
}
int main()
{
// dealer is 1
while (scanf(" %c", &temp), temp != '#')
{
scanf("%c %*c %c", &cardValues[0][25], &cardValues[1][25]);
for (int i = 24; i >= 0; --i)
scanf(" %*c %c %*c %c", &cardValues[0][i], &cardValues[1][i]);
numCards[0] = numCards[1] = 26;
stackSpot = spotIn[0] = spotIn[1] = stackNum = 0;
cPlayer = 1;
failedToPlay = -1;
while (failedToPlay == -1)
{
HandleCheck(1);
}
printf ("%d %2d\n", 1 + failedToPlay, numCards[1 - failedToPlay]);
}
}

Không có nhận xét nào:

Đăng nhận xét

Bài G - Educatioal Round 62

Đề bài: Bạn được cho 1 đồ thị vô hướng đặc biệt. Nó bao gồm $2n$ đỉnh được đánh số từ 1 đến 2n. Dưới đây là một số đặc tính của đồ thị: + ...