The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker

Posted ssummerzzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker相关的知识,希望对你有一定的参考价值。

题目链接:https://nanti.jisuanke.com/t/41408

题目意思很简单,就是个模拟过程。


  1 #include <iostream>
  2 #include <cstring>
  3 #include <algorithm>
  4 #include <cstdio>
  5 #include <map>
  6 #define rep(i,j,k) for(int i = (j); i <= (k); ++i)
  7 #define per(i,j,k) for(int i = (j); i >= (k); --i)
  8 #define rep__(i,j,k) for(int i = (j); i < (k); ++i)
  9 #define per__(i,j,k) for(int i = (j); i > (k); --i)
 10 #define inf 1e9
 11 using namespace std;
 12 typedef long long LL;
 13 const int N = (int)1e5 + 10;
 14 
 15 // map<char,int > mp;
 16 struct node
 17     char name[20];
 18     int card[20];
 19     bool pair;
 20     int rank_1,rank_2;
 21     int sum;
 22 
 23     void fun(char* tmp)
 24         rep__(i,0,20) card[i] = 0;
 25         rank_1 = rank_2 = 0;
 26         pair = false;
 27         sum = 0;
 28         int i = 0;
 29         while(tmp[i] != \0)
 30             if(tmp[i] == 1) //10
 31                 ++card[10];
 32                 i += 2;
 33                 sum += 10;//得出卡的总价值
 34             
 35             else
 36                 int k = 0;
 37                 if(tmp[i] >= 2 && tmp[i] <= 9) k = tmp[i] - 1 + 1;
 38                 else if(tmp[i] == A) k = 1;
 39                 else if(tmp[i] == J) k = 11;
 40                 else if(tmp[i] == Q) k = 12;
 41                 else if(tmp[i] == K) k = 13;
 42                 ++card[k];
 43                 ++i;
 44                 sum += k;//得出卡的总价值
 45             
 46         
 47     
 48 
 49     void rank()
 50         bool com = true;//没有任何的等级
 51         //最大的顺子
 52         if(card[10] && card[11] && card[12] && card[13] && card[1])
 53             rank_1 = 10;
 54             com = false;
 55         
 56         else 
 57             rep(i,1,13)
 58                 if(card[i] == 4) rank_1 = 8,sum += (-4*i + i*100),com = false;
 59                 else if(card[i] == 3)
 60                     //rank_1 == 0 ? rank_1 = 7 : rank_1 = 7,rank_2 = 1;
 61                     if(rank_1 == 0) rank_1 = 7;
 62                     else rank_1 = 7,rank_2 = 1;
 63                     sum += (-3*i + i*10000);
 64                     com = false;
 65                 
 66                 else if(card[i] == 2)
 67                     if(!pair)
 68                         rank_1 == 0 ? rank_1 = 1 : rank_2 = 1;
 69                         sum += (-2*i + i*100);
 70                         pair = 1;
 71                         com = false;
 72                     
 73                     else
 74                         rank_2 = 1;
 75                         sum += (-2*i + i*10000);
 76                     
 77                 
 78             
 79         
 80         //都不相同
 81         if(com)
 82             rep(i,1,13)
 83                 if(i + 4 > 13) break;
 84                 if(card[i] && card[i + 1] && card[i + 2] && card[i + 3] && card[i + 4])
 85                     rank_1 = 9;
 86                     break;
 87                 
 88             
 89         
 90     
 91 
 92     bool friend operator<(const node& a,const node& b)
 93         if(a.rank_1 != b.rank_1) return a.rank_1 > b.rank_1;
 94         else
 95             if(a.rank_2 != b.rank_2) return a.rank_2 > b.rank_2;
 96             else
 97                 if(a.sum != b.sum) return a.sum > b.sum;
 98                 else return strcmp(a.name,b.name) < 0 ? 1 : 0;
 99             
100         
101     
102 stu[N];
103 
104 int main()
105 
106     ios::sync_with_stdio(false);
107     cin.tie(0);
108     // mp[‘A‘] = 1; mp[‘2‘] = 2; mp[‘3‘] = 3; mp[‘4‘] = 4; mp[‘5‘] = 5; mp[‘6‘] = 6;
109     // mp[‘7‘] = 7; mp[‘8‘] = 8; mp[‘9‘] = 9; mp[‘J‘] = 11; mp[‘Q‘] = 12; mp[‘K‘] = 13;
110     int n;
111     char tmp[20];
112     while(cin >> n)
113         
114         rep(i,1,n)
115             cin >> stu[i].name >> tmp;
116             stu[i].fun(tmp);//装换成卡片
117             stu[i].rank();//等级
118         
119     
120         sort(stu + 1,stu + 1 + n);
121 
122         rep(i,1,n) cout << stu[i].name << endl;
123     
124 
125 //    getchar();getchar();
126     return 0;
127 
128 //  << ‘ ‘ << stu[i].rank_1 << ‘ ‘  << stu[i].rank_2  << ‘ ‘ << stu[i].sum 
129 
130 /*
131 
132 7
133 AQ A2345
134 AW 58976
135 AS 5A397
136 AP AAA99
137 AL 222AA
138 AG AA229
139 AU 1010A23
140 */

 

以上是关于The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker的主要内容,如果未能解决你的问题,请参考以下文章