問題描述:
題面
最近,東東沉迷於打牌。所以他找到 hrz、zjm 等人和他一起打牌。由於人數眾多,東東稍微修改了億下遊戲規則:
所有撲克牌只按數字來算大小,忽略花色。
每張撲克牌的大小由乙個值表示。a, 2, 3, 4, 5, 6, 7, 8, 9, 10, j, q, k 分別指代 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13。
每個玩家抽得 5 張撲克牌,組成一手牌!(每種撲克牌的張數是無限的,你不用擔心,東東家裡有無數副撲克牌)
理所當然地,一手牌是有不同型別,並且有大小之分的。
舉個栗子,現在東東的 "一手牌"(記為 α),瑞神的 "一手牌"(記為 β),要麼 α > β,要麼 α < β,要麼 α = β。
那麼這兩個 "一手牌",如何進行比較大小呢?首先對於不同型別的一手牌,其值的大小即下面的標號;對於同型別的一手牌,根據組成這手牌的 5 張牌不同,其值不同。下面依次列舉了這手牌的形成規則:
大牌:這手牌不符合下面任乙個形成規則。如果 α 和 β 都是大牌,那麼定義它們的大小為組成這手牌的 5 張牌的大小總和。
對子:5 張牌中有 2 張牌的值相等。如果 α 和 β 都是對子,比較這個 "對子" 的大小,如果 α 和 β 的 "對子" 大小相等,那麼比較剩下 3 張牌的總和。
兩對:5 張牌中有兩個不同的對子。如果 α 和 β 都是兩對,先比較雙方較大的那個對子,如果相等,再比較雙方較小的那個對子,如果還相等,只能比較 5 張牌中的最後那張牌組不成對子的牌。
三個:5 張牌中有 3 張牌的值相等。如果 α 和 β 都是 "三個",比較這個 "三個" 的大小,如果 α 和 β 的 "三個" 大小相等,那麼比較剩下 2 張牌的總和。
三帶二:5 張牌中有 3 張牌的值相等,另外 2 張牌值也相等。如果 α 和 β 都是 "三帶二",先比較它們的 "三個" 的大小,如果相等,再比較 "對子" 的大小。
炸彈:5 張牌中有 4 張牌的值相等。如果 α 和 β 都是 "炸彈",比較 "炸彈" 的大小,如果相等,比較剩下那張牌的大小。
順子:5 張牌中形成 x, x+1, x+2, x+3, x+4。如果 α 和 β 都是 "順子",直接比較兩個順子的最大值。
龍順:5 張牌分別為 10、j、q、k、a。
作為乙個稱職的魔法師,東東得知了全場人手裡 5 張牌的情況。他現在要輸出乙個排行榜。排行榜按照選手們的 "一手牌" 大小進行排序,如果兩個選手的牌相等,那麼人名字典序小的排在前面。
不料,此時一束宇宙射線掃過,為了躲避宇宙射線,東東慌亂中清空了他腦中的 cache。請你告訴東東,全場人的排名
輸入輸入包含多組資料。每組輸入開頭乙個整數 n (1 <= n <= 1e5),表明全場共多少人。
隨後是 n 行,每行乙個字串 s1 和 s2 (1 <= |s1|,|s2| <= 10), s1 是對應人的名字,s2 是他手裡的牌情況。
輸出對於每組測試資料,輸出 n 行,即這次全場人的排名。
樣例輸入
3
dongdong aaa109
zjm 678910
hrz 678910
樣例輸出
hrz
zjmdongdong
思路:
這道題剛開始的時候沒想到用結構體結果寫了230行左右才寫出來,但是被不知名bug搞得一直wa。所以後來換了結構體重寫,**也簡短了好多。
在結構體裡面儲存剛開始輸入的字串,以及沒個人對應的牌是否有對子(有幾個),三張,四張等,以及牌的大小,總和。
先輸入資料,通過函式處理把字串轉化為每張牌有幾張,然後判斷屬於哪種手牌進行排序輸出即可。
#include
#include
#include
#include
#include
using
namespace std;
int n,num[20]
;struct p
else
if(result==2)
else
if(result==3)
else
if(result==
4||result==5)
else
if(result==6)
else
if(result==7)
}return a}}xx[
100010];
voiddi(
int y)if(
'2'<= xx[y]
.b[i]
&& xx[y]
.b[i]
<=
'9')
if(xx[y]
.b[i]
=='a')if
(xx[y]
.b[i]
=='j')if
(xx[y]
.b[i]
=='q')if
(xx[y]
.b[i]
=='k')}
if(num[1]
&&num[10]
&&num[11]
&&num[12]
&&num[13]
)int k=0;
for(
int i=
13;i>=
1;i--)}
if(num[i]==4
)if(num[i]==3
)if(num[i]==2
)}}if
(xx[y]
.ans[0]
!=0&&xx[y]
.vis!=0)
if(xx[y]
.vis!=0)
if(xx[y]
.ans[0]
!=0) xx[y]
.result=1;
return;}
void
output()
}voidcs(
)output()
;}}int
main()
WEEK9 B 東東學打牌
題面 最近,東東沉迷於打牌。所以他找到 hrz zjm 等人和他一起打牌。由於人數眾多,東東稍微修改了億下遊戲規則 所有撲克牌只按數字來算大小,忽略花色。每張撲克牌的大小由乙個值表示。a,2,3,4,5,6,7,8,9,10,j,q,k 分別指代 1,2,3,4,5,6,7,8,9,10,11,12...
WEEK9 作業 B 東東學打牌
最近,東東沉迷於打牌。所以他找到 hrz zjm 等人和他一起打牌。由於人數眾多,東東稍微修改了億下遊戲規則 所有撲克牌只按數字來算大小,忽略花色。每張撲克牌的大小由乙個值表示。a,2,3,4,5,6,7,8,9,10,j,q,k 分別指代 1,2,3,4,5,6,7,8,9,10,11,12,13...
Week9作業 B 東東學打牌 模擬
最近,東東沉迷於打牌。所以他找到 hrz zjm 等人和他一起打牌。由於人數眾多,東東稍微修改了億下遊戲規則 所有撲克牌只按數字來算大小,忽略花色。每張撲克牌的大小由乙個值表示。a,2,3,4,5,6,7,8,9,10,j,q,k 分別指代 1,2,3,4,5,6,7,8,9,10,11,12,13...