题意
额,就是给你 5 张牌,让你判定这手牌的分数,纯模拟,具体的规则如下:
1、Straight flush: 1000 points five cards of the same suit in sequence, such as 76543 of hearts. Note that AKQJX is treated as a valid sequence.
2、Four of a kind: 750 points four cards of the same rank accompanied by a "kicker", like 44442.
3、Full house: 500 points three cards of one rank accompanied by two of another, such as 777JJ.
4、Flush: 350 points five cards of the same suit, such as AJ942 of hearts.
5、Straight: 250 points five cards in sequence, such as 76543. Note that AKQJX is treated as a valid sequence.
6、Three of a kind: 200 points three cards of the same rank and two kickers of different ranks, such as KKK84.
7、Two pairs: 100 points two cards of one rank, two cards of another rank and a kicker of a third rank, such as KK449.
8、One pair: 50 points two cards of one rank accompanied by three kickers of different ranks, such as AAK53.
9、None of the above: O point any hand that does not qualify as one of the better hands above, such as KJ542 of mixed suits.
不知道当时拼着怎样的毅力做完的。。。反正分数是一次增大的,从上到下判断就行,好恶心
AC通道
POJ 2694. A Simple Poker Game
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#define INT_INF 0x3fffffff
#define LL_INF 0x3fffffffffffffff
#define EPS 1e-12
#define MOD 1000000007
#define PI 3.141592653579798
#define N 300
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef double DB;
struct data
{
char s[2];
} card[6];
bool cmp(data a,data b)
{
if(a.s[1]==b.s[1]) return a.s[0]<b.s[0];
else return a.s[1]<b.s[1];
}
int cal()
{
int fg1=1 , fg2=1;
for(int i=1;i<=4;i++)
if(card[i].s[0]!=card[i+1].s[0])
{
fg1=0;
break;
}
for(int i=1;i<=4;i++)
if(card[i].s[1]!=card[i+1].s[1]-1)
{
fg2=0;
break;
}
if(card[1].s[1]==1 && card[2].s[1]==10 && card[3].s[1]==11 && card[4].s[1]==12 && card[5].s[1]==13) fg2=1;
if(fg1 && fg2) return 1000;
if(card[1].s[1]!=card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]==card[5].s[1]) return 750;
if(card[1].s[1]==card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 750;
if(card[1].s[1]==card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]==card[5].s[1]) return 500;
if(card[1].s[1]==card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]==card[5].s[1]) return 500;
if(fg1) return 350;
if(fg2) return 250;
if(card[1].s[1]!=card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]==card[5].s[1]) return 200;
if(card[1].s[1]==card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 200;
if(card[1].s[1]!=card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]==card[5].s[1]) return 100;
if(card[1].s[1]==card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]==card[5].s[1]) return 100;
if(card[1].s[1]==card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 100;
if(card[1].s[1]==card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 50;
if(card[1].s[1]!=card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 50;
if(card[1].s[1]!=card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 50;
if(card[1].s[1]!=card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]==card[5].s[1]) return 50;
return 0;
}
int main()
{
int n;
scanf("%d",&n);
for(int ca=1;ca<=n;ca++)
{
for(int i=1;i<=5;i++)
{
scanf("%s",&card[i].s);
if(card[i].s[1]>='0' && card[i].s[1]<='9') card[i].s[1]=card[i].s[1]-'0';
if(card[i].s[1]=='A') card[i].s[1]=1;
if(card[i].s[1]=='X') card[i].s[1]=10;
if(card[i].s[1]=='J') card[i].s[1]=11;
if(card[i].s[1]=='Q') card[i].s[1]=12;
if(card[i].s[1]=='K') card[i].s[1]=13;
}
sort(card+1,card+1+5,cmp);
printf("%d\n",cal());
}
return 0;
}