题目:

最近,东东沉迷于打牌。所以他找到 HRZ、ZJM 等人和他一起打牌。由于人数众多,东东稍微修改了亿下游戏规则:

所有扑克牌只按数字来算大小,忽略花色。
每张扑克牌的大小由一个值表示。A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K 分别指代 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13。
每个玩家抽得 5 张扑克牌,组成一手牌!(每种扑克牌的张数是无限的,你不用担心,东东家里有无数副扑克牌)
理所当然地,一手牌是有不同类型,并且有大小之分的。

举个栗子,现在东东的 “一手牌”(记为 α),瑞神的 “一手牌”(记为 β),要么 α > β,要么 α < β,要么 α = β。

那么这两个 “一手牌”,如何进行比较大小呢?首先对于不同类型的一手牌,其值的大小即下面的标号;对于同类型的一手牌,根据组成这手牌的 5 张牌不同,其值不同。下面依次列举了这手牌的形成规则:

大牌:这手牌不符合下面任一个形成规则。如果 α 和 β 都是大牌,那么定义它们的大小为组成这手牌的 5 张牌的大小总和。

对子:5 张牌中有 2 张牌的值相等。如果 α 和 β 都是对子,比较这个 “对子” 的大小,如果 α 和 β 的 “对子” 大小相等,那么比较剩下 3 张牌的总和。

两对:5 张牌中有两个不同的对子。如果 α 和 β 都是两对,先比较双方较大的那个对子,如果相等,再比较双方较小的那个对子,如果还相等,只能比较 5 张牌中的最后那张牌组不成对子的牌。

三个:5 张牌中有 3 张牌的值相等。如果 α 和 β 都是 “三个”,比较这个 “三个” 的大小,如果 α 和 β 的 “三个” 大小相等,那么比较剩下 2 张牌的总和。

三带二:5 张牌中有 3 张牌的值相等,另外 2 张牌值也相等。如果 α 和 β 都是 “三带二”,先比较它们的 “三个” 的大小,如果相等,再比较 “对子” 的大小。

炸弹:5 张牌中有 4 张牌的值相等。如果 α 和 β 都是 “炸弹”,比较 “炸弹” 的大小,如果相等,比较剩下那张牌的大小。

顺子:5 张牌中形成 x, x+1, x+2, x+3, x+4。如果 α 和 β 都是 “顺子”,直接比较两个顺子的最大值。

龙顺:5 张牌分别为 10、J、Q、K、A。

作为一个称职的魔法师,东东得知了全场人手里 5 张牌的情况。他现在要输出一个排行榜。排行榜按照选手们的 “一手牌” 大小进行排序,如果两个选手的牌相等,那么人名字典序小的排在前面。

不料,此时一束宇宙射线扫过,为了躲避宇宙射线,东东慌乱中清空了他脑中的 Cache。请你告诉东东,全场人的排名

输入:
输入包含多组数据。每组输入开头一个整数 n (1 <= n <= 1e5),表明全场共多少人。
随后是 n 行,每行一个字符串 s1 和 s2 (1 <= |s1|,|s2| <= 10), s1 是对应人的名字,s2 是他手里的牌情况。

输出:
对于每组测试数据,输出 n 行,即这次全场人的排名。

样例:
Input:

3
DongDong AAA109
ZJM 678910
Hrz 678910

Output:

Hrz
ZJM
DongDong

思路:

用结构体维护每个人的牌的信息。

首先初始化,将读入进来的牌处理成数字1~13,并用tmp[i]的值表示牌i有几张。
初始化完成后,利用tmp数组,更新上面的各个信息,描述5张牌的情况。
结构体排序函数需重写。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int tmp[15];
struct node
{char name[11];char s[11];//分数int mark; //五张牌的总大小 int tot;/*two[0]:0无对 1有一对 2有两对 two[1]:第一对牌是哪一对(若有)two[2]:第二对牌是哪一对(若有)*/int two[3];/*three[0]:0无三张相同的牌 1有三张相同的牌three[1]:哪三张相同(若有)*/int three[3];/*four[0]:0无四张相同的牌 1有四张相同的牌four[1]:哪四张相同(若有)*/int four[3];//0无顺子 1有顺子 bool shun;bool operator < (const node p)const{if(mark!=p.mark)return mark>p.mark;else if(mark==p.mark){if(mark==1){if(tot!=p.tot)return tot>p.tot;}else if(mark==2){if(two[1]!=p.two[1])return two[1]>p.two[1];else if(tot!=p.tot)return tot>p.tot;}else if(mark==3){if(two[1]!=p.two[1])return two[1]>p.two[1];else if(two[2]!=p.two[2])return two[2]>p.two[2];else if(tot!=p.tot)return tot>p.tot;}else if(mark==4||mark==5){if(three[1]!=p.three[1])return three[1]>p.three[1];else if(tot!=p.tot)return tot>p.tot;}else if(mark==6){if(four[1]!=p.four[1])return four[1]>p.four[1];else if(tot!=p.tot)return tot>p.tot;}else if(mark==7){if(tot!=p.tot)return tot>p.tot;}}int l1=strlen(name),l2=strlen(p.name);for(int j=0;j<min(l1,l2);j++){if(name[j]==p.name[j]) continue;if(name[j]<p.name[j]) return true;if(name[j]>p.name[j]) return false;}if(l1<l2) return true;return false;}
}a[100010];
void pre_function(int x)
{int i=0;memset(tmp,0,sizeof(tmp));while(i<strlen(a[x].s)){if(a[x].s[i]=='1'){tmp[10]++;i++;}else{if(a[x].s[i]>='2'&&a[x].s[i]<='9')tmp[a[x].s[i]-'0']++;else{if(a[x].s[i]=='A')tmp[1]++;if(a[x].s[i]=='J')tmp[11]++;if(a[x].s[i]=='Q')tmp[12]++;if(a[x].s[i]=='K')tmp[13]++;}}i++;}if(tmp[1]&&tmp[10]&&tmp[11]&&tmp[12]&&tmp[13]){a[x].mark=8;return;}for(int i=1;i<=13;i++)if(tmp[i]){for(int j=1;j<=tmp[i];j++)a[x].tot+=i;}//从13向1循环,顺序不能反 ,保证two[1]中存的一定是最大的 for(int i=13;i>=1;i--){if(tmp[i]==4){a[x].four[0]=1;a[x].four[1]=i;a[x].mark=6;return;}if(tmp[i]==3){a[x].three[0]=1;a[x].three[1]=i;}if(tmp[i]==2){a[x].two[0]++;if(a[x].two[0]==1)a[x].two[1]=i;else{a[x].two[2]=i;a[x].mark=3;return;}}}for(int i=1;i<=9;i++)if(tmp[i]&&tmp[i+1]&&tmp[i+2]&&tmp[i+3]&&tmp[i+4]){a[x].shun=1;a[x].mark=7;return;}if(a[x].two[0]==1&&a[x].three[0]==1){a[x].mark=5;return;}if(a[x].two[0]==1){a[x].mark=2;return;}if(a[x].three[0]==1){a[x].mark=4;return;}a[x].mark=1;
}
void init(int x)
{memset(a[x].two,0,sizeof(a[x].two));memset(a[x].three,0,sizeof(a[x].three));memset(a[x].four,0,sizeof(a[x].four));a[x].shun=0;a[x].mark=0;a[x].tot=0;
}
int main()
{int n;while(scanf("%d",&n)!=EOF){for(int i=1;i<=n;i++){init(i); cin>>a[i].name>>a[i].s;pre_function(i);}sort(a+1,a+n+1);for(int i=1;i<=n;i++)cout<<a[i].name<<endl;}return 0;
}

东东学打牌 Week9作业B题相关推荐

  1. 【Week9 作业】A - 咕咕东的目录管理器、B - 东东学打牌、C - 签到题,独立思考哈

    A - 咕咕东的目录管理器 题意: 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响,时不时发生故障,他受不了了,想要写一个高效易用零bug的操作系统 -- 这工程量太大了,所以他定了一个小目标, ...

  2. B - 东东学打牌(Week9.2作业)

    题面 最近,东东沉迷于打牌.所以他找到 HRZ.ZJM 等人和他一起打牌.由于人数众多,东东稍微修改了亿下游戏规则: 所有扑克牌只按数字来算大小,忽略花色. 每张扑克牌的大小由一个值表示.A, 2, ...

  3. 【Week9作业 B】东东学打牌【模拟】

    题意: 最近,东东沉迷于打牌.所以他找到 HRZ.ZJM 等人和他一起打牌.由于人数众多,东东稍微修改了亿下游戏规则: 所有扑克牌只按数字来算大小,忽略花色. 每张扑克牌的大小由一个值表示.A, 2, ...

  4. WEEK9 作业 B - 东东学打牌

    B - 东东学打牌 题目描述 最近,东东沉迷于打牌.所以他找到 HRZ.ZJM 等人和他一起打牌.由于人数众多,东东稍微修改了亿下游戏规则: 所有扑克牌只按数字来算大小,忽略花色. 每张扑克牌的大小由 ...

  5. Week9 作业——B - 东东学打牌

    题目 最近,东东沉迷于打牌.所以他找到 HRZ.ZJM 等人和他一起打牌.由于人数众多,东东稍微修改了亿下游戏规则: 所有扑克牌只按数字来算大小,忽略花色. 每张扑克牌的大小由一个值表示.A, 2, ...

  6. 程序设计思维 week9 作业B-东东学打牌

    目录 题目 Input Ouput Sample Input Sample Ouput 思路 代码 总结 题目 所有扑克牌只按数字来算大小,忽略花色. 每张扑克牌的大小由一个值表示.A, 2, 3, ...

  7. [week9]东东学打牌

    文章目录 题意 Input Output 输入样例 输出样例 提示 分析 总结 代码 题意 最近,东东沉迷于打牌.所以他找到 HRZ.ZJM 等人和他一起打牌.由于人数众多,东东稍微修改了亿下游戏规则 ...

  8. week9 B-东东学打牌

    题面 最近,东东沉迷于打牌.所以他找到 HRZ.ZJM 等人和他一起打牌.由于人数众多,东东稍微修改了亿下游戏规则: 所有扑克牌只按数字来算大小,忽略花色. 每张扑克牌的大小由一个值表示.A, 2, ...

  9. 程序设计Week9——B-东东学打牌

    B-东东学打牌 题目描述 Input Output 解题思路 实现代码 总结 题目描述 打牌,只考虑牌的数值,不考虑花色,每个人五张手牌,每种牌数量无限,手牌大小比较规则: 序号越大,牌越大,在得知全 ...

最新文章

  1. java中的wait和sleep_java中wait和sleep的区别
  2. clr 面试_Java中高级面试题及答案
  3. Jdbc创建表 利用循环添加数据 ,更新数据
  4. document中输出html字符串流,HTML DOMDocument从段落后面的标签中获取字符串
  5. Zookeeper客户端Curator使用详解
  6. Hadoop+Spark 集群部署
  7. IFIX上位机网络测试画面
  8. Android 8.0 学习(17)---Android8.0中对指纹的新要求
  9. 1106. Lowest Price in Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)
  10. iOS学习笔记(十五)——数据库操作(SQLite)
  11. 形容计算机老师风采的句子,赞美老师的优美句子
  12. 图片清晰度差怎么修复成高清图片
  13. java 合并excel单元格
  14. Java学习笔记-不定时更新
  15. linux centos数据备份,centOS系统的备份与还原
  16. s32k118开发环境搭建
  17. 联想收购方正,不是不可能
  18. might和could的区别用法_地道的英语口语:Might、 may、could用法区分
  19. 万豪国际集团在山东日照设立首家酒店
  20. python做游戏服务器_浅谈如何做一个游戏服务器

热门文章

  1. 点击按钮实现直接播放视频功能
  2. HMI-8-[Qt 播放GIF动画]:启动画面的实现
  3. 2021年高考临沂成绩查询,2021年临沂大学录取结果查询,附查询网址入口
  4. [POI2010]CHO-Hamsters
  5. ZOJ 3885 The Exchange of Items
  6. 跨站请求伪造Cross-Site Request Forgery-CSRF
  7. 完成端口与AcceptEx
  8. CSP-何以包邮?(从背包问题的角度出发)
  9. purify的API和提示信息代号
  10. Android 知识梳理目录 - 好吧,这是一个很“干,android物联网开发从入门到实战