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

原文地址:https://www.cnblogs.com/SSummerZzz/p/11573710.html

时间: 2024-08-25 04:39:26

The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker的相关文章

C:Dawn-K&#39;s water (The Preliminary Contest for ICPC Asia Shenyang 2019)

Dawn-K recently discovered a very magical phenomenon in the supermarket of Northeastern University: The large package is not necessarily more expensive than the small package. On this day, Dawn-K came to the supermarket to buy mineral water, he found

The Preliminary Contest for ICPC Asia Shenyang 2019

The Preliminary Contest for ICPC Asia Shenyang 2019 Texas hold'em Poker #include <bits/stdc++.h> using namespace std; const int maxn=1e6+10; int num[1000]; int shun(){ for (int i=15;i>=5;i--){ if (num[i]&&num[i-1]&&num[i-2]&&a

The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk&#39;s pool

题目链接:https://nanti.jisuanke.com/t/41406 思路:如果k的天数足够大,那么所有水池一定会趋于两种情况: ① 所有水池都是一样的水位,即平均水位 ② 最高水位的水池和最低水位的水池高度只相差一个高度,且最低水位一定是平均水位 如果k给了个限制: 我们当然需要先算出所有水池高度的平均值. 然后从低到高排序,二分小于平均值的水位,二分高于平均值的水位, 然后判断二分的预期值需要的天数是否小于等于k.然后二分找出最低水位的最大值, 最高水位的最小值,两者相减就是答案了

The Preliminary Contest for ICPC Asia Shanghai 2019 C Triple(FFT+暴力)

The Preliminary Contest for ICPC Asia Shanghai 2019 C Triple(FFT+暴力) 传送门:https://nanti.jisuanke.com/t/41400 题意: 给你三个数组a,b,c,要你求有多少个三元组(i,j,k),使得 \[ \begin{array}{l}{\left|A_{i}-B_{j}\right| \leq C_{k}, \text { and }} \\ {\left|B_{j}-C_{k}\right| \leq

The Preliminary Contest for ICPC Asia Nanjing 2019/2019南京网络赛——题解

(施工中……) 比赛传送门:https://www.jisuanke.com/contest/3004 D. Robots(期望dp) 题意 给一个DAG,保证入度为$0$的点只有$1$,出度为$0$的点只有$n$. 现在一个机器人从$1$出发,每天都会以相同的概率前往相邻节点之一或静止不动. 每天机器人消耗的耐久等于经过的天数. 求机器人到点$n$期望消耗的耐久. 划水划的很愉快,唯一一道做出来的题.但是和题解做法不同(感觉我的方法麻烦),因此砸了3h在这题上面(正在试图读懂题解ing). 设

The Preliminary Contest for ICPC Asia Nanjing 2019 D. Robots(概率dp)

题目链接:https://nanti.jisuanke.com/t/41301 题目大意: 给定一个没有循环的有向图,它从节点1开始,到节点n结束. 有一个机器人从1开始,每天都会以相同的概率前往相邻节点之一或静止不动.每天机器人的耐久性消耗量等于经过的天数. 请计算机器人到达节点n时的预期耐久性消耗量. 保证只有一个节点(节点1)的in-degree等于00,并且只有一个节点(节点n)的out-degree等于0.并且图中没有多个边缘. 解题思路: 设dp[i]为从i到达终点n的期望时间那么很

The Preliminary Contest for ICPC Asia Xuzhou 2019

A What is better? 推不出来,写个程序打表,用扩展中国剩余定理合并,居然会溢出longlong,还好不会溢出__int128(赛后exit(-1)测试),实际证明溢出返回-1是不靠谱的,毕竟后面可以又把它搞小了. #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef __int128 lll; const int MAXK = 10 + 5; void exgcd(lll a, ll

The Preliminary Contest for ICPC Asia Shanghai 2019

D. Counting Sequences I 暴力搜索. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MOD = 1000000007; map<vector<short>, short> m; vector<short> vec; void calc(int num1) { vector<short> tmp; if(num1) t

Digit sum-----The Preliminary Contest for ICPC Asia Shanghai 2019

A digit sum S_b(n)Sb?(n) is a sum of the base-bb digits of nn. Such as S_{10}(233) = 2 + 3 + 3 = 8S10?(233)=2+3+3=8, S_{2}(8)=1 + 0 + 0 = 1S2?(8)=1+0+0=1, S_{2}(7)=1 + 1 + 1 = 3S2?(7)=1+1+1=3. Given NN and bb, you need to calculate \sum_{n=1}^{N} S_b