Thứ Ba, 8 tháng 1, 2019

UVa 00462 - Bridge Hand Evaluator * (simulation; card)

Link: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=6&page=show_problem&problem=403
Sol:
#include <cstdio>
#include <map>
int main()
{
std::map<char, int> suitConversion;
suitConversion['S'] = 0;
suitConversion['H'] = 1;
suitConversion['D'] = 2;
suitConversion['C'] = 3;
char back[4] = {'S', 'H', 'D', 'C'};
// Is ordered 'S', 'H', 'D', 'C'
bool ace[4], king[4], queen[4], jack[4], trump[4];
int count[4], points, specialPoints, pos;
char temp[3];
while (scanf("%s", temp) == 1)
{
for (int i = 0; i < 4; ++i)
{
ace[i] = king[i] = queen[i] = jack[i] = trump[i] = false;
count[i] = 0;
}
points = specialPoints = 0;
for (int i = 0; i < 13; ++i)
{
if (i != 0)
scanf("%s", temp);
pos = suitConversion[temp[1]];
switch (temp[0])
{
case 'A':
ace[pos] = true;
points += 4;
break;
case 'K':
king[pos] = true;
points += 3;
break;
case 'Q':
queen[pos] = true;
points += 2;
break;
case 'J':
jack[pos] = true;
points += 1;
}
++count[pos];
}
// Subtractions
for (int i = 0; i < 4; ++i)
{
if (ace[i])
trump[i] = true;
if (king[i] && count[i] < 2)
--points;
else if (king[i])
trump[i] = true;
if (queen [i] && count[i] < 3)
--points;
else if (queen[i])
trump[i] = true;
if (jack[i] && count[i] < 4)
--points;
if (count[i] == 2)
++specialPoints;
else if (count[i] < 2)
specialPoints += 2;
}
if (trump[0] && trump[1] && trump[2] && trump[3] && points >= 16)
printf("BID NO-TRUMP\n");
else if (points + specialPoints >= 14)
{
char output = 'S';
int max = 0;
for (int i = 1; i < 4; ++i)
{
if (count[i] > count[max])
{
max = i;
output = back[i];
}
}
printf("BID %c\n", output);
}
else
printf("PASS\n");
}
}

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ị: + ...