最近,阿夸迷于德州扑克。所以她找到了很多人和她一起玩。由于人数众多,阿夸必须更改游戏规则:
所有扑克牌均只看数字,不计花色。
每张卡的值为1、2、3、4、5、6、7、8、9、10、11、12、13 中的一种(对应A,2、3、4、5、6、7, 8、9、10,J,Q,K)
每位玩家从一副完整的扑克牌(没有大小王)中抽出五张扑克牌,可能出现的手牌的值从低到高排列如下:

高牌:不包含以下牌的牌。对于都是高牌的牌,按照五张牌的值的和进行从大到小排序。
对子:手中的5张牌中有2张相同值的牌。对于都拥有对子的牌,按构成该对子的牌的值进行从大到小地排序。如果这些都相同,则按手牌中余下3张牌的值的和进行从大到小排序。**
两对:手中拥有两对不同的对子。对于都包含两对的手牌,按其最高对子的值进行从大到小排序。如果最高对子相同,则按另一个对子的值从大到小地进行排序。如果这些值相同,则按剩余牌的值从大到小地进行排序。
三条:手中拥有3张相同值的牌。对于都包含三条的手牌按构成三条的牌的值进行从大到小地排序。如果这些值相同,则按剩余牌的值从大到小地进行排序。
满堂红:手中拥有一个三条和一个对子。同理,先按三条大小排序,如果三条大小相同,则按对子大小进行排序。
四条:手中拥有4张相同值的牌。对于都包含四条的手牌按构成四条的牌的值进行从大到小地排序。如果这些值相同,则按剩余牌的值从大到小地进行排序。
顺子:手中拥有5张连续值的卡。对于都包含顺子的手牌按顺子最大的牌进行排序。
皇家同花顺:手中拥有10到A(10、J、Q、K、A)。是最大的手牌!**

现在,阿夸已经知道了每个人的手牌,她想要知道所有人的排名列表。如果玩家的手牌大小相等,则按玩家名字的字典序输出。保证没有重复的名字。你能帮帮她吗?

输入格式:

第一行包含一个正整数 N (1<=N<=100000) ,表示玩家的人数。

接下来 N 行,每行包含两个字符串:m (1<=|m|<=10 ) ,表示玩家的名字;s (1<=|s|<=10),表示玩家的手牌。

输出格式:

输出 N个玩家的排名列表。

输入样例:

3
Alice AAA109
Bob 678910
Boa 678910

输出样例:

Boa
Bob
Alice

代码:

#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
const char book[14]="A234567891JQK";
map<char,int>mp;
struct node{string name,book;char num[5];int type;
};
bool cmp1(char e,char d){return mp[e]<mp[d];
}
char tong(char num[],int n){//有n张相同的牌 char c;int max=0;map<char,int>mp1;for(int i=0;i<5;i++){mp1[num[i]]++;if(mp1[num[i]]>max){max=mp1[num[i]];c=num[i];}if(max==n)   return c;}return 0;
}
bool shun(char num[]){//判断顺子 for(int i=1;i<5;i++){if(mp[num[i]]!=(mp[num[i-1]]+1))  return false;}return true;
}
bool royal(char num[]){//判断皇家同花顺string r="A1JQK";string s(num,num+5);//不能直接=num,num有6位 if(s==r)   return true;return false;
}
//
int f(char num[]){if(royal(num))    return 8;//皇家同花顺if(shun(num))   return 7;//顺子if(tong(num,4))    return 6;//四条if(tong(num,3)){char c=tong(num,3);char t='?';for(int i=0;i<5;i++){if(num[i]!=c){if(num[i]==t)    return 5;//满堂红 t=num[i];}}return 4;//三条 }if(tong(num,2)){int s=0;for(int i=1;i<5;i++){if(num[i]==num[i-1])s++;}if(s==2)   return 3;//两对 return 2;//对子 }return 1;//高牌
}
//
bool cmp(node a,node b){if(a.book!=b.book){int na=a.type,nb=b.type;//cout<<na<<nb<<endl;//if(na==nb){if(na==8) return a.name<b.name;if(na==7){if(a.num[4]!=b.num[4]) return mp[a.num[4]]>mp[b.num[4]];return a.name<b.name;}if(na==6){//TL警告 char sa,sb,da,db;da=sa=tong(a.num,4);db=sb=tong(b.num,4);if(sa!=sb)    return mp[sa]>mp[sb];else{for(int i=0;i<5;i++) if(a.num[i]!=sa)   da=a.num[i];for(int i=0;i<5;i++) if(b.num[i]!=sb)   db=b.num[i];if(da!=db)    return mp[da]>mp[db];}return a.name<b.name;}if(na==5){char sa,sb,da,db;sa=tong(a.num,3);sb=tong(b.num,3);if(sa!=sb)  return mp[sa]>mp[sb];else{for(int i=0;i<5;i++) if(a.num[i]!=sa)   da=a.num[i];for(int i=0;i<5;i++) if(b.num[i]!=sb)   db=b.num[i];if(da!=db)    return mp[da]>mp[db];}return a.name<b.name;}if(na==4){char sa,sb;int da=0,db=0;sa=tong(a.num,3);sb=tong(b.num,3);if(sa!=sb)    return mp[sa]>mp[sb];else{for(int i=0;i<5;i++) if(a.num[i]!=sa)   da+=mp[a.num[i]];for(int i=0;i<5;i++)   if(b.num[i]!=sb)   db+=mp[b.num[i]];if(da!=db)  return da>db;}return a.name<b.name;}if(na==3){char a1,a2,b1,b2,da,db;if(a.num[4]!=a.num[3]){a1=a.num[3];a2=a.num[0];da=a.num[4];}else{a1=a.num[4];if(a.num[0]==a.num[1]){a2=a.num[0];da=a.num[2];}else{a2=a.num[1];da=a.num[0];}}if(b.num[4]!=b.num[3]){b1=b.num[3];b2=b.num[0];db=b.num[4];}else{b1=b.num[4];if(b.num[0]==b.num[1]){b2=b.num[0];db=b.num[2];}else{b2=b.num[1];db=b.num[0];}}if(a1!=b1)  return mp[a1]>mp[b1];if(a2!=b2) return mp[a2]>mp[b2];if(da!=db) return mp[da]>mp[db];return a.name<b.name;}if(na==2){char sa=tong(a.num,2),sb=tong(b.num,2);int ssa=0,ssb=0;if(sa!=sb) return mp[sa]>mp[sb];for(int i=0;i<5;i++){if(sa!=a.num[i]){ssa+=mp[a.num[i]];}if(sb!=b.num[i]){ssb+=mp[b.num[i]];}}if(ssa!=ssb) return ssa>ssb;return a.name<b.name;}if(na==1){int sa=0,sb=0;for(int i=0;i<5;i++){sa+=mp[a.num[i]];sb+=mp[b.num[i]];}if(sa!=sb)    return sa>sb;return a.name<b.name;}}return na>nb;}return a.name<b.name;
}
//
int main(){mp['A']=1;mp['2']=2;mp['3']=3;mp['4']=4;mp['5']=5;mp['6']=6;mp['7']=7;mp['8']=8;mp['9']=9;mp['1']=10;mp['J']=11;mp['Q']=12;mp['K']=13;int n;cin>>n;node a[n];for(int i=0;i<n;i++){cin>>a[i].name>>a[i].book;int k=0;for(int j=0;j<a[i].book.size();j++){if(a[i].book[j]!='0')   a[i].num[k++]=a[i].book[j];}sort(a[i].num,a[i].num+5,cmp1);a[i].type=f(a[i].num);}sort(a,a+n,cmp);for(int i=0;i<n;i++){cout<<a[i].name<<endl;}
}

德州扑克 C/C++相关推荐

  1. 继人工智能攻陷围棋,德州扑克也沦陷了

    相对于围棋,德州扑克的非完美信息给了人工智能更大的压力. 继AlphaGo披着"Master"在中韩围棋界大获全胜后,德州扑克也不幸沦陷,只不过这次的主角并不是AlphaGo. 近 ...

  2. 浅谈线上德州扑克平台的公平性

    前言: 我是一名普通的德州扑克爱好者, 曾在网上打过一段时间(属于娱乐性质^_^). 有人说线上打牌, 平台发的牌很妖(冤家牌特多, 防不胜防). 对此我有些看法, 看看能否从概率论的角度, 评估下线 ...

  3. 德州阿尔法计算机技术有限公司,德州扑克被人工智能完美攻陷 为什么比阿尔法狗还值得关注?...

    在2017的扑克锦标赛赛上,一个名为Libratus的扑克游戏程序轻松地从12000名人类选手当中脱颖而出,并且连续击败四名职业选手夺冠.尽管取得了令人瞩目的成就,但是Libratus的创造者Tuom ...

  4. Java小游戏 —— 德州扑克

    其实还是有一些错误的,很多功能懒得实现了,顺子方面我实现不来,好吧主要还是偷懒,仅供参考,java做扑克的视频b站有,不过具体实现要靠自己完成,上面只有怎么把符号和点数组合成一张牌 package G ...

  5. 德州扑克里的专业术语你知道几个?

    干货!干货!不知道德州扑克这几个词的意思还敢说你会玩德州? 德州扑克里的专业术语你知道几个? 德州扑克全称德克萨斯扑克,是一种玩家对玩家的公共牌类游戏,考验玩家的运气.技术与耐心.德州扑克的规则虽然简 ...

  6. python做一副54扑克牌发牌技巧_德州扑克讲堂:高级技巧 胜率之摊牌胜率的算法...

    行动胜率的算法.行动获胜是德州扑克中唯二的获胜方式,掌握了对手的弃牌率的话,就算手里完全没牌也可以轻松获胜.然而具体打出对手稳定的弃牌则是一种高级技巧.对于初学玩家,推荐掌握好摊牌胜率的算法,稳当地用 ...

  7. java中使用几率_Java中使用蒙特卡洛算法计算德州扑克成牌概率(二)- 计算牌面分值...

    德州扑克中比较重要的一个算法就是计算牌面的得分,不仅仅关乎概率计算的结果,同时也需要很高的性能.蒙特卡洛算法计算的次数越多结果越准确,因此算法的性能至关重要.下面是一个高性能的牌面java计算算法. ...

  8. android德州扑克计算器,学界 | 一台笔记本打败超算:CMU冷扑大师团队提出全新德扑AI Modicum...

    原标题:学界 | 一台笔记本打败超算:CMU冷扑大师团队提出全新德扑AI Modicum 选自arXiv 参与:路.晓坤 CMU 冷扑大师团队在读博士 Noam Brown.Tuomas Sandho ...

  9. 德州python培训_人工智能在多人桌德州扑克比赛中战胜世界顶尖选手

    新华社华盛顿7月11日电(记者周舟)美国卡内基-梅隆大学11日宣布,该校和脸书公司合作开发的人工智能Pluribus在六人桌德州扑克比赛中击败多名世界顶尖选手,成为机器在多人游戏中战胜人类的一个里程碑 ...

  10. 一场改变你投资生涯的讨论:职业德州扑克手看交易

    各位投友大家好. 校长今天花时间仔细读了一篇长文,叫做<职业德州扑克手看交易:没犯任何错误照样输个精光>,非常棒的文章. 可惜不知道作者是谁,但看得出来,文中讲到的他自己在德州扑克上的经验 ...

最新文章

  1. BZOJ3515 : EvenPaths
  2. ROS学习之URDF
  3. PostgreSQL学习笔记1之表定义
  4. mybatis学习(35):sql-where
  5. Python:time库使用方法
  6. 实验一matlab编程基础,实验一、MATLAB编程基础及典型实例.doc
  7. seller_info-获得淘宝店铺详情,获得店铺电话API接口,店铺详情接口接入说明
  8. 2018中国开源开发者调查问卷
  9. 计算机修改用户名密码,怎么修改电脑用户名
  10. ADC基本原理与STM32F030ADC应用
  11. 还原codeblocks 的Logs others
  12. android应用程序永久获取root权限方法,怎么使Android应用程序获得root权限
  13. Linux 安装 Minio
  14. Multisim--软件简介及安装教程(含Multisim14安装包资源)
  15. 第一章 ArcGIS软件安装(Desktop、Server):ArcGIS10.4为例
  16. 英语、数学不精,还可以选择IT行业吗?
  17. 模式识别hw2-------基于matconvnet,用CNN实现人脸图片性别识别
  18. Timo管理系统小记
  19. 计算机关机慢什么原因,电脑关机慢怎么回事_七种解决电脑关机慢的方法
  20. 微信支付总结--小程序与H5页面微信支付

热门文章

  1. python读取docx文件出错_Python:读取 .doc、.docx 两种 Word 文件简述及“Word 未能引发事件”错误...
  2. Matlab中N是什么意思,MATLAB中y=FFT(X,N)中的N是什么意思
  3. Git中的工作区和暂存区
  4. 调用smooth函数进行加噪数据的平滑处理
  5. 用python画DCA临床决策曲线
  6. openid会变吗?微信小程序开发中的appid、openid、unionid使用总结
  7. 让你熟悉 from gne import GeneralNewsExtractor是怎么样的
  8. 浅析MOS管开关速度影响因素-KIA MOS管
  9. void (*f(int, void (*)(int)))(int) 函数解析
  10. 【计算机毕业设计】外卖点餐系统