Login with GitHub. Nope?
修正 C++ 的程式碼在使用一定量動態記憶體後會產生 RF 的問題 @ 2019/12/6 4:45pm NeoHOJ 強勢復活中 (Open beta)
Submit  Ranklist

Problem : 170 - 黑傑克

Problem Statistics

Solved Member: 11  Submission: 51  User Tried: 14

Statement:

撲克牌遊戲21點,又有另一個別稱叫「黑傑克」,它的遊戲規則是這樣的:
1.使用一副標準撲克牌,每個花色有A,2,3,4,5,6,7,8,9,10,J,Q,K這13張牌、共有四個花色,也就是總共52張牌。
(花色分別是黑桃、紅心、方塊、梅花,不過它們在這裡並不重要)
2.遊戲共有兩個人,他們分別是主持遊戲的莊家、以及與之對抗的玩家
3.一局的開頭會先發給莊家兩張牌,隨後發兩張牌給玩家
4.遊戲的目的是在手牌點數不超過21的前提下,拿到點數比對手更高的手牌
5.點數的計算方法:2-10依牌面數字,J,Q,K算10點、A可以當1點或11點
6.進入玩家的回合:玩家可以決定加牌(hit)來增加點數,或是停牌(stand)來結束自己的回合
7.如果加牌後點數超過21點就是爆牌,玩家就輸了,此局結束
8.玩家停牌後,進入莊家的回合:莊家沒有加牌的自由意志,必須不斷加牌直到點數不少於17點
9.「A」這張牌對莊家來說,優先以11點看待,假如因此達成至少17點就必須停牌;如果會因為這樣爆牌,才能以1點來看待
10.如果莊家爆牌、並且玩家沒有爆牌,玩家即獲勝(莊家有「後爆牌」優勢);否則,手上點數較高的一方獲勝。假如點數相同,那麼雙方平手
11.每局結束後收回所有的牌洗牌重來

現在,賭神傑克萬已經派人滲透了賭場,得知了每一局中52張撲克牌的明確順序。他想請你幫忙寫一個程式,告訴他在最適當的策略下,玩家是否可能從這樣的牌序中獲勝?如果不能獲勝,能不能打成平手?抑或不存在任何玩家獲勝的可能性?(這樣他就知道每一局該下注多或少了)

Input:Output:

輸入檔第一行包含正整數T (1≦T≦5),表示這個檔案有多少筆測試資料
緊接著從第二行開始,每組測試資料佔四行、每行顯示13張牌,是傑克萬得到的52張牌的順序,每張牌之間有空格隔開
每組測試資料間有一空白行隔開
我們保證輸入的每副撲克牌都是合法的
對每筆測試資料輸出一行,如果可能獲勝則輸出「win」、不可能獲勝但可能打成平手輸出「push」、無論如何都不可能獲勝則輸出「lose」(都不含括弧)

Sample Input:Sample Output:

3
J Q 6 7 8 2 J 6 4 7 6 8 7
2 J K A 3 10 5 9 9 10 9 5 8
7 Q 6 5 3 9 4 10 Q A K 4 5
4 K Q 2 A 2 3 3 J 8 10 K A

6 4 8 2 5 5 2 3 5 J 7 2 K
4 5 8 10 6 9 K Q 2 8 4 10 3
7 7 A 7 4 9 10 6 9 A 9 3 J
Q Q J 8 3 6 K 10 J Q K A A

K A 10 6 6 3 10 Q Q 7 7 J A
6 8 2 K 10 8 6 4 K J 7 9 3
8 K 2 9 5 J A 3 5 5 J 7 2
3 Q Q 4 4 4 9 5 8 A 10 9 2
win
push
lose

Source:

101附中校內賽

Problem Setter

Testdata:

TestTimeMemoryScore
02000ms65536kb
12000ms65536kb20
22000ms65536kb20
32000ms65536kb20
42000ms65536kb20
52000ms65536kb20