UVa 131 - The Psychic Poker Player
题目:手里有五张牌,桌上有一堆牌(五张)。你能够弃掉手中的k张牌,然后从牌堆中取最上面的k个。
比較规则例如以下:(按优先级排序)
1.straight-flush:同花顺。牌面为T(10) - A,这里不论花色是否同样;
2.four-of-a-kind:四条,牌面有4个同样的值。
3.full-house:船牌,牌面有3个同样值,剩下2个也同样值。
4.flush:同花,五张牌的花色同样,不是同花顺;
5.straight:顺子。五张牌的值连续,A能够作为1也能够作为14;
6.three-of-a-kind:三条,牌面有3个同样的值;
7.two-pairs:两对。牌面有2个对子。
8.one-pair:一对,牌面有一个对子,即2个同值;
9.highest-card:大牌,没有以上牌型。
分析:搜索、枚举。枚举换牌数从0-5的每种情况,推断,取出优先值最高的就可以。
说明:读题是重点。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio> #define min(x,y) ((x)<(y)? (x):(y)) using namespace std; char temp[5][3];
char card[10][3];
int maps[5][13]; char output[11][20] = {
"","straight-flush","four-of-a-kind",
"full-house","flush","straight","three-of-a-kind",
"two-pairs","one-pair","highest-card",""}; int value( char ch )
{
if ( ch == 'T' ) return 9;
if ( ch == 'J' ) return 10;
if ( ch == 'Q' ) return 11;
if ( ch == 'K' ) return 12;
if ( ch == 'A' ) return 0;
return ch - '1';
} int color( char ch )
{
if ( ch == 'S' ) return 0;
if ( ch == 'H' ) return 1;
if ( ch == 'D' ) return 2;
if ( ch == 'C' ) return 3;
} int tests()
{
//royal-flush | straight-flush
for ( int i = 0 ; i < 5 ; ++ i )
if ( maps[i][0]&maps[i][9]&maps[i][10]&maps[i][11]&maps[i][12] )
return 1;
//four-of-a-kind
for ( int i = 0 ; i < 13 ; ++ i )
if ( maps[4][i] == 4 ) return 2;
//full-house
int three = 0,two = 0;
for ( int i = 0 ; i < 13 ; ++ i ) {
if ( maps[4][i] == 2 ) two ++;
if ( maps[4][i] == 3 ) three ++;
}
if ( two && three ) return 3;
//flush
for ( int i = 0 ; i < 4 ; ++ i ) {
int count = 0;
for ( int j = 0 ; j < 13 ; ++ j )
count += maps[i][j];
if ( count >= 5 ) return 4;
}
//straight
for ( int i = 0 ; i < 10 ; ++ i )
if ( maps[4][i]&maps[4][i+1]&maps[4][i+2]&maps[4][i+3]&maps[4][(i+4)%13] )
return 5;
//three-of-a-kind
if ( three ) return 6;
//two-pairs
if ( two > 1 ) return 7;
//one-pair
if ( two ) return 8;
return 9;
} void change()
{
for ( int i = 0 ; i < 5 ; ++ i )
strcpy(temp[i],card[i+5]);
memset( maps, 0, sizeof(maps) );
for ( int i = 0 ; i < 5 ; ++ i ) {
maps[color(temp[i][1])][value(temp[i][0])] = 1;
maps[4][value(temp[i][0])] ++;
}
int Min = tests(); for ( int k = 1 ; k <= 5 ; ++ k ) {
int xx,yy,comb = (1<<k)-1;
while ( comb < 32 ) {
// 计算当前状态相应的集合
int j = 0,count = 0,move = 5;
do {
if ( (1<<j)&comb )
strcpy(temp[count ++],card[j]);
j ++;
}while ( j < 5 ); while ( count < 5 )
strcpy(temp[count ++],card[move ++]); memset( maps, 0, sizeof(maps) );
for ( int i = 0 ; i < 5 ; ++ i ) {
maps[color(temp[i][1])][value(temp[i][0])] = 1;
maps[4][value(temp[i][0])] ++;
} Min = min(Min,tests());
// 位运算计算下一组合
xx = comb&-comb,yy = comb+xx;
comb = ((comb&~yy)/xx>>1)|yy;
}
}
printf("%s\n",output[Min]);
} int main()
{
while ( ~scanf("%s",card[0]) ) {
for ( int i = 1 ; i < 10 ; ++ i )
scanf("%s",card[i]); printf("Hand: ");
for ( int i = 0 ; i < 5 ; ++ i )
printf("%s ",card[i]);
printf("Deck: ");
for ( int i = 5 ; i < 10 ; ++ i )
printf("%s ",card[i]);
printf("Best hand: ");
change();
}
return 0;
}
UVa 131 - The Psychic Poker Player的更多相关文章
- uva131 The Psychic Poker Player
The Psychic Poker Player Time Limit: 3000MS 64bit IO Format: %lld & %llu Description In 5-ca ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- 备战NOIP每周写题记录(一)···不间断更新
※Recorded By ksq2013 //其实这段时间写的题远远大于这篇博文中的内容,只不过那些数以百记的基础题目实在没必要写在blog上; ※week one 2016.7.18 Monday ...
- [IOS] Storyboard全解析-第一部分
(Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图: 现在,你就可以清楚的看到这 ...
- iOS Storyboard全解析
来源:http://iaiai.iteye.com/blog/1493956 Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果, ...
- iOS Storyboard 的基本用法
(Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图: 现 在,你就可以清楚的看 ...
- Java-->发牌流程修改版
--> 这一次要封装得狠一点... package com.xm.ddz; // 每一张牌的属性 public class Card { private String flowerColor; ...
- 最新iOS 6 in Xcode4.5新特性——Storyboard和属性自动绑定
最新iOS 6 in Xcode4.5新特性编程之二(上)——Storyboard和属性自动绑定 从Xcode 4.3开始,Storyboard 就是iOS 5和iOS 6中令人兴奋的一个新特性,他将 ...
- java练习:质数,匿名内部类创建接口,抽象类派生子类,画圆,字节截取字符串,数字变钱币,五子棋,梭哈
java学习-质数的孤独 正在看质数的孤独,,,于是写了一个练习代码,输出1-100之间的质数 代码比较烂.待完善吧. 这里用到了continue和break,continue指结束当前轮次循环,跳入 ...
随机推荐
- webapp开发经验和资料
开发经验: 开发资料: 1. http://xuui.net/librarys/webapps/webapp-development-of-commonly-used-code-snippets.ht ...
- 【JSP】让HTML和JSP页面不缓存从Web服务器上重新获取页面
用户退出后,如果点击浏览器上的后退按钮,Web应用将不能正确保护受保护的页面——在Session销毁后(用户退出)受保护的JSP页重新在浏览器中显示出来. 然而,如果用户点击返回页面上的任何链接,We ...
- Ext入门学习系列(五)表格控件(1)
上节学习了Ext面板控件,为后面的各个控件学习奠定基础,在此基础上本章将学习网络开发最期待的功能——表格控件. 我们都知道网络编程语言中,除了.net其他的基本没有提供网格控件,而最近的asp.net ...
- POJ 1258 Agri-Net
题意:给一个无向图的邻接矩阵,求最小生成树. 解法:Kruskal算法.把边按边权排序,从小到大插入生成树中,如果一个边的两个点都在生成树中则不插入,用并查集维护. 代码: #include<s ...
- Could not locate executable null 解决办法
问题导读: 1.建一个MapReduce Project,运行时发现出问题:Could not locate executable null,该如何解决?2.Could not locate exec ...
- [MySQL-1] mysql error 1101 blob/text column can't have a default value
在MySQL Query Browser上创建一个含有TEXT类型的字段,创建不成功,报错:mysql error 1101 blob/text column can't have a default ...
- 魅族MX2代理设置
魅族MX2买了快2年了,今天才知道有这个功能,唉 连接一个无线网络,比如我的centos 长按网络名字 选代理设置,设置自己的代理,再也不用SS 或 VPN 的android端了,老是提示ROOT权限 ...
- Java HashMap存储问题
public static boolean isIsomorphic(String s, String t) { Map map1 = new HashMap<>(); Map map2 ...
- 《C Primer Plus 第五版》读书笔记
CH1-2:概述 链接器:链接库代码.启动代码(start-up code) CH3-5:数据.字符串.运算符 1 数据类型存储方式:整数类型.浮点数类型 2 浮点数存储:小数部分+指数部分 3 in ...
- Ubuntu 14.04 设置静态IP
使用Network Manager UI界面中指定 手动时,无法保存. 通过修改配置文件解决来此问题.记录以下. 如果输入过密码后,就会出现在这个目录下面, 以如下chinaNet为例 gaojing ...