原题链接

https://nanti.jisuanke.com/t/41408

题目描述

基本思路

本题的关键问题在于玩家的排序,首先根据手牌情况进行排序,若手牌相同,则根据name进行排序。为了更加方便的进行排序,可以将手牌情况映射到一个整数score,score大的排在前面。

求score的方法:可以使用THREE(1000000)、TWO(10000)、ONE(100)、1表示不同的优先级。score等于不同优先级的指标与对应优先级相乘再相加得到。

例如:
"两对"手牌的score=3(类型)×THREE+较大的对子的值×TWO+较小的对子的值×ONE+剩下的一张牌的值×1"两对"手牌的score = 3(类型) \times THREE + 较大的对子的值 \times TWO + 较小的对子的值 \times ONE + 剩下的一张牌的值\times 1"两对"手牌的score=3(类型)×THREE+较大的对子的值×TWO+较小的对子的值×ONE+剩下的一张牌的值×1
"龙顺"手牌的score=8(类型)×THREE"龙顺"手牌的score = 8(类型) \times THREE"龙顺"手牌的score=8(类型)×THREE

小技巧

对五张手牌进行排序后有利于区分其类型。

完整代码

#include<iostream>
#include<algorithm>
#define THREE 1000000
#define TWO  10000
#define ONE  100
using namespace std;
int n;
int v[200];
struct Player{string name;int score;int ps[5];bool operator < (const Player &p) const{if(score != p.score)  return score > p.score;return name < p.name;}
}pyr[100005];
int c;
void setType(Player &p)
{if(p.ps[0]==1 && p.ps[1] == 10 && p.ps[2] == 11 && p.ps[3] == 12 && p.ps[4]==13){p.score = 8 * THREE;}else if(p.ps[0]+1==p.ps[1] && p.ps[1]+1==p.ps[2] && p.ps[2]+1==p.ps[3] &&p.ps[3]+1==p.ps[4]){p.score = 7 *THREE + p.ps[4] * TWO; }else if(p.ps[0] == p.ps[3]){p.score = 6 * THREE + p.ps[0] * TWO + p.ps[4] * ONE;}else if(p.ps[1] == p.ps[4]){p.score = 6 * THREE + p.ps[1] * TWO + p.ps[0] * ONE;}else if(p.ps[0] == p.ps[2] && p.ps[3] == p.ps[4]){p.score = 5 * THREE + p.ps[0] * TWO + p.ps[3] * ONE;}else if(p.ps[2] == p.ps[4] && p.ps[0] == p.ps[1]){p.score = 5 * THREE + p.ps[2] * TWO + p.ps[0] * ONE;}else if(p.ps[0] == p.ps[2]){p.score = 4 * THREE + p.ps[0] * TWO + (p.ps[3]+p.ps[4])*ONE;}else if(p.ps[1] == p.ps[3]){p.score = 4 * THREE + p.ps[1] * TWO +  (p.ps[0]+p.ps[4])*ONE;} else if(p.ps[2] == p.ps[4]){p.score = 4 * THREE + p.ps[2] * TWO + (p.ps[0]+p.ps[1])*ONE;}else if(p.ps[0] == p.ps[1] && p.ps[2] == p.ps[3]){p.score = 3 * THREE + p.ps[2] * TWO + p.ps[1] * ONE + p.ps[4];}else if(p.ps[0] == p.ps[1] && p.ps[3] == p.ps[4]){p.score = 3 * THREE + p.ps[3] * TWO + p.ps[1] * ONE + p.ps[2];}else if(p.ps[1] == p.ps[2] && p.ps[3] == p.ps[4]){p.score = 3 * THREE + p.ps[3] * TWO + p.ps[2] * ONE + p.ps[0];}else if(p.ps[0] == p.ps[1]){p.score = 2 * THREE + p.ps[0] * TWO + (p.ps[2]+p.ps[3]+p.ps[4]) * ONE;}else if(p.ps[1] == p.ps[2]){p.score = 2 * THREE + p.ps[1] * TWO + (p.ps[0]+p.ps[3]+p.ps[4]) * ONE;}else if(p.ps[2] == p.ps[3]){p.score = 2 * THREE + p.ps[2] * TWO + (p.ps[0]+p.ps[1]+p.ps[4]) * ONE;}else if(p.ps[3] == p.ps[4]){p.score = 2 * THREE + p.ps[3] * TWO + (p.ps[0]+p.ps[1]+p.ps[2]) * ONE;}else p.score = THREE + (p.ps[0]+p.ps[1]+p.ps[2]+p.ps[3]+p.ps[4])*TWO;
}void readpyr()
{cin>>pyr[c].name;string poks;cin>>poks;int m=0;int len = poks.length();for(int i=0;i<len;i++){if(poks[i] == '1') i++, pyr[c].ps[m++]=10;else pyr[c].ps[m++]=v[poks[i]];}sort(pyr[c].ps, pyr[c].ps+m);setType(pyr[c]);c++;
}
int main ()
{ios::sync_with_stdio(false);for(int i='2';i<='9';i++)   v[i]=i-'0';v['A']=1;v['J']=11;v['Q']=12;v['K']=13;while(cin>>n){c=0;for(int i=0;i<n;i++)    readpyr();sort(pyr, pyr+c);for(int i=0;i<c;i++)  cout<<pyr[i].name<<endl; }return 0;
}

Week9 作业B - 东东学打牌 [计蒜客 - 41408]相关推荐

  1. 计蒜客 41408 Texas hold‘em Poker 模拟

    Texas hold'em Poker Source: The Preliminary Contest for ICPC Asia Shenyang 2019 H Link: Texas hold'e ...

  2. 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...

    在人才招聘领域存在这样一个怪圈,高校每年都说是最难就业年.人才过剩,而对于企业HR来说永远都招不到称心如意的人才.这个怪圈在"计蒜客"创始人俞昊然看来,主要是因为当今高校的教学资源 ...

  3. 计蒜客一月入门赛:《三个火枪手》题解

    题目链接(https://nanti.jisuanke.com/t/52314) 有 n 个人,其中有 m 对相互认识的关系. 一个人的知名度定义为 有多少人 和他相互认识. 现在蒜头君需要从这 n ...

  4. 计蒜客难题题库之一 泥塑课 python解答

    计蒜客挑战难题之一 泥塑课 python解答 题目: 小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过250立方厘米的等量橡皮泥,教大家做泥塑.在上课过程中,她发现每个班都恰好有一个小 ...

  5. 计蒜客2020蓝桥杯大学A组模拟赛题解

    计蒜客2020蓝桥杯大学A组模拟赛题解 蓝桥杯的话,去年拿了C++组的国二.今年报名了新成立的Python组,不知道能不能摸到国一的鱼 模拟赛链接如下: https://www.jisuanke.co ...

  6. 计蒜客 挑战难题 爬楼梯

    计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...

  7. 无脑博士的试管们java_计蒜客 无脑博士和他的试管们

    标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...

  8. 最短路(遍历边)计蒜客—DD坐地铁

    题目: C 城有 n 个站点, m 条双向地铁,每条地铁有一个 companyicompany_icompanyi​表示它的公司,如果连续乘坐同一家公司的地铁只要花 1元钱就好.DD现在想出门找萨摩耶 ...

  9. K - Triangle 计蒜客 - 42405

    K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...

最新文章

  1. 数据仓库的未来 MariaDB ColumnStore
  2. 生猛!PDF 版本 6000 页 Java 手册开放下载!
  3. linux下mysql的基本用法
  4. 在 emu8086 中学习汇编In,Out指令
  5. 再见xx网盘!4 行命令搭建属于你的私人网盘!
  6. mysql主从架构升级_实战项目——mysql主从架构的实现
  7. python 获取脚本当前路径_Python获取脚本所在目录的正确方法
  8. 十二生肖配对表查询_天蝎座:分手后最容易复合的星座配对,一生分不开,最终重新走到一起...
  9. matlab虚拟现实之在V-Realm Builder2中建立父子关系
  10. 三元运算符最终结果的数据类型
  11. Ext JS 6学习文档–第1章–ExtJS入门指南
  12. matlab力学大作业答案,计算力学大作业报告.docx
  13. 面试阿里,看这一篇就够了!
  14. bp神经网络综合评价例题,bp神经网络综合评价法
  15. 信创操作系统--麒麟Kylin桌面版 (项目三 控制中心:账户、自定义、个性化、声音、日期、电源管理、网络、输入法、系统更新等设置)
  16. node-java_node-jvm
  17. Java代码判断字符串中是否含有表情
  18. stm32f105vct6例程_stm32f105例程 CAN500K USART_LED
  19. python : pandas 画移动平均线
  20. linux环境js打不开,linux 环境无法通过egg-scripts start启动项目,wait start 300超时退出...

热门文章

  1. MIT 6.S965 韩松课程 04
  2. OSChina 周三乱弹 ——你有社交恐惧症么?
  3. 就是这么简单,QQ被盗了可以这样找回来!
  4. 最近在读的几篇不错MySQL文章
  5. MongoDB的Morphia框架
  6. 云服务器搭建减少物流信息成本,摩方谈物流运输:10大措施,控制物流运输成本!...
  7. docx4j word to html,使用Docx4J生成 html
  8. 关于计算机这个行业,中级技工证书有什么意义吗?
  9. 蚂蚁金服二面————终结
  10. 2021年G3锅炉水处理考试总结及G3锅炉水处理模拟试题