ZOJ1111 Poker Hands(類比)

來源:互聯網
上載者:User

終於啃下來了,我類個去啊,那題意,真心糾結啊……

要是按我原來的理解,這個題基本就是無解,不過,後來 XY 在竟然 YY 個方法過了,問她,才知道,我理解錯了……

題意:

就是那個叫豪斯的遊戲,以前記得在電子詞典上玩過的。說是兩個人,一人發五張牌,根據花色,還有點數決定誰贏。這個題把牌的組合給分成了8種類型,每種類型都有一個層級,層級高的一定能贏層級低的組合;如果倆人的牌的層級一樣,就按題目的描述繼續比較,如果還比不出來,直接輸出 Tie 。

沒啥了,按題目要求類比吧,這是個體力活……

代碼:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct Node{int num,mark;}black[6],white[6];int val(char x){int a;if(x>='2' && x<='9')a=x-'0';else if(x=='T')a=10;else if(x=='J')a=11;else if(x=='Q')a=12;else if(x=='K')a=13;else if(x=='A')a=14;else if(x=='C')a=1;else if(x=='D')a=2;else if(x=='H')a=3;else if(x=='S')a=4;return a;}int cmp(Node a,Node b){return a.num < b.num;}int up[6];int same(Node * a){//j值從0~4共5種可能,表示5張牌中有多少不同點數int i,j=0;for(i=2;i<=5;i++){if(a[i].num!=a[i-1].num)up[j++]=i;}return j;}int judge(Node * a){//先判斷層級 int flag1=0,flag2=0;if(a[1].mark==a[2].mark && a[2].mark==a[3].mark && a[3].mark==a[4].mark && a[4].mark==a[5].mark)flag1=1;//同花if(a[1].num+1==a[2].num && a[2].num+1==a[3].num && a[3].num+1==a[4].num && a[4].num+1==a[5].num)flag2=1;//順子if(flag1 && flag2)return 1;//同花順else if(flag1 && !flag2)return 4;//同花else if(!flag1 && flag2)return 5;//順子int ans=same(a);if(ans==0)return 2;//4+1else if(ans==1){if(up[0]==2 || up[0]==5)return 2;if(up[0]==3 || up[0]==4)return 3;//3+2}else if(ans==2){if(up[0]==2&&up[1]==3 || up[0]==2&&up[1]==5 || up[0]==4&&up[1]==5)return 6;//3+1+1else return 7;//2+2+1}else if(ans==3)return 8;//2+1+1+1else if(ans==4)return 9;return 0;}int find_one(Node * a){//找到 2+2+1 中的那個 1int i;for(i=1;i<=5;i++){if(i==1 && a[i].num!=a[i+1].num)return 1;else if(i==5 && a[i].num!=a[i-1].num)return 5;else if(a[i].num!=a[i-1].num && a[i].num!=a[i+1].num)return i;}return 0;}int find_pair(Node * a){//找到 2+1+1+1 中的那個 2int i;for(i=1;i<=5;i++){if(i==1 && a[i].num==a[i+1].num)return 2;else if(a[i].num==a[i-1].num)return i;}return 0;}int compare(int x){//相同層級之間的比較int i,j,k,a,b;if(x==1){if(black[5].num==white[5].num)return 0;else if(black[5].num>white[5].num)return 1;else return -1;}else if(x==2 || x==3){if(black[3].num==white[3].num)return 0;else if(black[3].num>white[3].num)return 1;else return -1;}else if(x==4 || x==9){for(i=5;i>=1;i--){if(black[i].num<white[i].num)return -1;else if(black[i].num>white[i].num)return 1;}return 0;}else if(x==5){if(black[5].num==white[5].num)return 0;else if(black[5].num>white[5].num)return 1;else return -1;}else if(x==6){if(black[3].num==white[3].num)return 0;else if(black[3].num>white[3].num)return 1;else return -1;}else if(x==7){if(black[4].num<white[4].num)return -1;else if(black[4].num>white[4].num)return 1;else if(black[4].num==white[4].num){if(black[2].num<white[2].num)return -1;else if(black[2].num>white[2].num)return 1;else if(black[2].num==white[2].num){a=find_one(black);b=find_one(white);if(black[ a ].num==white[ b ].num)return 0;else if(black[ a ].num > white[ b ].num)return 1;else return -1;}}}else if(x==8){a=find_pair(black);b=find_pair(white);int tmp_a[6],tmp_b[6];for(j=k=i=1;i<=5;i++){if(i!=a && i!=a-1)tmp_a[j++]=black[i].num;if(i!=b && i!=b-1)tmp_b[k++]=white[i].num;}if(black[a].num<white[b].num)return -1;else if(black[a].num>white[b].num)return 1;else {for(i=3;i>=1;i--){if(tmp_a[i]<tmp_b[i])return -1;else if(tmp_a[i]>tmp_b[i])return 1;}return 0;}}return 0;}int main(){char str[3];int i,j,k;while(~scanf("%2s",str)){j=k=1;black[j].num=val(str[0]);black[j++].mark=val(str[1]);for(i=2;i<=10;i++){scanf("%2s",str);if(i<6){black[j].num=val(str[0]);black[j++].mark=val(str[1]);}else {white[k].num=val(str[0]);white[k++].mark=val(str[1]);}}sort(black+1,black+6,cmp);sort(white+1,white+6,cmp);int degree_black=judge(black);int degree_white=judge(white);if(degree_black < degree_white)puts("Black wins.");else if(degree_black > degree_white)puts("White wins.");else {int x=compare(degree_black);if(x==1)puts("Black wins.");else if(x==-1)puts("White wins.");else puts("Tie.");}}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.