题目描述题目要求模拟发牌过程并对每个玩家的手牌进行排序按花色梅花♣\clubsuit♣、方块♢\diamondsuit♢、黑桃♠\spadesuit♠、红桃♡\heartsuit♡和点数23⋯TJQKA2 3 \dots \text{T} \text{J} \text{Q} \text{K} \text{A}23⋯TJQKA升序排列。输出四位玩家的手牌顺序为S\texttt{S}S、W\texttt{W}W、N\texttt{N}N、E\texttt{E}E。输入格式输入包含多个测试用例。每个测试用例第一行是一个字符表示发牌人N\texttt{N}N、E\texttt{E}E、S\texttt{S}S、W\texttt{W}W。接下来两行每行262626个字符表示一副牌每张牌由花色和点数两个字符组成共525252个字符。输入以#结束。输出格式对于每个测试用例输出四行格式为玩家: 牌1 牌2 ...玩家顺序为S\texttt{S}S、W\texttt{W}W、N\texttt{N}N、E\texttt{E}E。样例输入N CQDTC4D8S7HTDAH7D2S3D6C6S6D9S4SAD7H2CKH5D3CT8SC9H3C3 DQS9SQDJH8HAS2SKD4H4S5C7SJC8DKC5C2CAHQCJSTH6HKH9D5HJ #输出S:C3C5C7CTCJ D9DTDJ S3SKH2H9HT W:C2C4CK D4D5D6DQDA S4S8ST SJH8 N:C6C8C9CA D8S9SAH4H5H6H7HJHA E:CQ D2 D3 D7 DK S2 S5 S6 S7 SQ H3 HQ HK题目分析本题的核心是模拟发牌和排序。发牌规则发牌人先发给自己左手边的玩家按顺时针顺序依次发牌。共525252张牌每位玩家得到131313张。排序规则花色顺序CDSH\texttt{C} \texttt{D} \texttt{S} \texttt{H}CDSH。点数顺序23456789TJQKA2 3 4 5 6 7 8 9 \text{T} \text{J} \text{Q} \text{K} \text{A}23456789TJQKA。输出顺序输出四行顺序为S\texttt{S}S、W\texttt{W}W、N\texttt{N}N、E\texttt{E}E即南、西、北、东。算法步骤确定发牌起始玩家发牌人的左手边。读取525252张牌依次分配给四位玩家。对每位玩家的手牌按花色和点数排序。按指定顺序输出。复杂度分析O(52log13)O(52 \log 13)O(52log13)可接受。代码实现// Bridge Hands// UVa ID: 555// Verdict: Accepted// Submission Date: 2016-08-12// UVa Run Time: 0.040s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;mapchar,intsuits{{C,0},{D,1},{S,2},{H,3}};mapchar,intranks{{2,0},{3,1},{4,2},{5,3},{6,4},{7,5},{8,6},{9,7},{T,8},{J,9},{Q,10},{K,11},{A,12}};mapint,chardealers{{0,S},{1,W},{2,N},{3,E}};mapchar,intoffset{{S,3},{W,2},{N,1},{E,0}};string suit_textCDSH,rank_text23456789TJQKA;structcard{intsuit,rank;booloperator(constcardanother)const{if(suit!another.suit)returnsuitanother.suit;elsereturnrankanother.rank;}};intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);chardealer,suit,rank;while(cindealer,dealer!#){vectorvectorcardcards(4,vectorcard(13));for(inti0;i13;i)for(intj0;j4;j){cinsuitrank;cards[j][i].suitsuits[suit];cards[j][i].rankranks[rank];}for(inti0;i4;i)sort(cards[i].begin(),cards[i].end());for(autod:dealers){coutd.second:;for(autoc:cards[(offset[dealer]d.first)%4])cout suit_text[c.suit]rank_text[c.rank];cout\n;}}return0;}
UVa 555 Bridge Hands
发布时间:2026/6/21 18:54:35
题目描述题目要求模拟发牌过程并对每个玩家的手牌进行排序按花色梅花♣\clubsuit♣、方块♢\diamondsuit♢、黑桃♠\spadesuit♠、红桃♡\heartsuit♡和点数23⋯TJQKA2 3 \dots \text{T} \text{J} \text{Q} \text{K} \text{A}23⋯TJQKA升序排列。输出四位玩家的手牌顺序为S\texttt{S}S、W\texttt{W}W、N\texttt{N}N、E\texttt{E}E。输入格式输入包含多个测试用例。每个测试用例第一行是一个字符表示发牌人N\texttt{N}N、E\texttt{E}E、S\texttt{S}S、W\texttt{W}W。接下来两行每行262626个字符表示一副牌每张牌由花色和点数两个字符组成共525252个字符。输入以#结束。输出格式对于每个测试用例输出四行格式为玩家: 牌1 牌2 ...玩家顺序为S\texttt{S}S、W\texttt{W}W、N\texttt{N}N、E\texttt{E}E。样例输入N CQDTC4D8S7HTDAH7D2S3D6C6S6D9S4SAD7H2CKH5D3CT8SC9H3C3 DQS9SQDJH8HAS2SKD4H4S5C7SJC8DKC5C2CAHQCJSTH6HKH9D5HJ #输出S:C3C5C7CTCJ D9DTDJ S3SKH2H9HT W:C2C4CK D4D5D6DQDA S4S8ST SJH8 N:C6C8C9CA D8S9SAH4H5H6H7HJHA E:CQ D2 D3 D7 DK S2 S5 S6 S7 SQ H3 HQ HK题目分析本题的核心是模拟发牌和排序。发牌规则发牌人先发给自己左手边的玩家按顺时针顺序依次发牌。共525252张牌每位玩家得到131313张。排序规则花色顺序CDSH\texttt{C} \texttt{D} \texttt{S} \texttt{H}CDSH。点数顺序23456789TJQKA2 3 4 5 6 7 8 9 \text{T} \text{J} \text{Q} \text{K} \text{A}23456789TJQKA。输出顺序输出四行顺序为S\texttt{S}S、W\texttt{W}W、N\texttt{N}N、E\texttt{E}E即南、西、北、东。算法步骤确定发牌起始玩家发牌人的左手边。读取525252张牌依次分配给四位玩家。对每位玩家的手牌按花色和点数排序。按指定顺序输出。复杂度分析O(52log13)O(52 \log 13)O(52log13)可接受。代码实现// Bridge Hands// UVa ID: 555// Verdict: Accepted// Submission Date: 2016-08-12// UVa Run Time: 0.040s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;mapchar,intsuits{{C,0},{D,1},{S,2},{H,3}};mapchar,intranks{{2,0},{3,1},{4,2},{5,3},{6,4},{7,5},{8,6},{9,7},{T,8},{J,9},{Q,10},{K,11},{A,12}};mapint,chardealers{{0,S},{1,W},{2,N},{3,E}};mapchar,intoffset{{S,3},{W,2},{N,1},{E,0}};string suit_textCDSH,rank_text23456789TJQKA;structcard{intsuit,rank;booloperator(constcardanother)const{if(suit!another.suit)returnsuitanother.suit;elsereturnrankanother.rank;}};intmain(intargc,char*argv[]){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);chardealer,suit,rank;while(cindealer,dealer!#){vectorvectorcardcards(4,vectorcard(13));for(inti0;i13;i)for(intj0;j4;j){cinsuitrank;cards[j][i].suitsuits[suit];cards[j][i].rankranks[rank];}for(inti0;i4;i)sort(cards[i].begin(),cards[i].end());for(autod:dealers){coutd.second:;for(autoc:cards[(offset[dealer]d.first)%4])cout suit_text[c.suit]rank_text[c.rank];cout\n;}}return0;}