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的主要内容,如果未能解决你的问题,请参考以下文章
The Preliminary Contest for ICPC Asia Yinchuan 2019
The Preliminary Contest for ICPC Asia Shenyang 2019
The Preliminary Contest for ICPC Asia Shanghai 2019
The Preliminary Contest for ICPC Asia Shanghai 2019