ZOJ 1111 Poker Hands --复杂模拟
昨天晚上写的,写了一个多小时,9000+B,居然1A了,爽。
题意:玩扑克,比大小。规则如下:
题意很简单,看过赌神的人都知道,每人手中5张排,比牌面大小,牌面由大到小分别是(这里花色无大小),级别从高到低依次为:
1.同花顺:牌面一样,只比较最大的看谁大,一样大则平手
2.四条:四个一样的,看这四个一样的中谁大谁赢
3.葫芦:三条+一对,看三条中谁的牌面大
4.同花:都是同花就按从大到小比较,看谁的更大
5.顺子:都是顺子看最大的谁大,一样则平手
6.三条:三条看三条中谁的牌面大
7.两对: 两对就看谁的对子大,都一样大比单牌
8.一对: 比对子,一样则比单牌
9.单排:按顺序比较大小,大者胜
知道规则了就搞就行了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 100007 struct node
{
int num,suit;
}a[],b[];
int BigstPair[],SecondPair[],Remain[]; //
int k[][]; //
int m[][]; // int cmp(node ka,node kb)
{
return ka.num < kb.num;
} pair<int,int> solve(node a[],int tag)
{
int i,j;
sort(a,a+,cmp);
int level = ;
int val = ;
int flag = ;
for(i=;i<;i++)
{
if(a[i].suit != a[i-].suit)
break;
}
if(i == )
{
for(j=;j<;j++)
{
if(a[j].num != a[j-].num+)
break;
}
if(j == )
return make_pair(level,a[].num);
}
//
level--;
if((a[].num == a[].num && a[].num == a[].num && a[].num == a[].num)||(a[].num == a[].num && a[].num == a[].num && a[].num == a[].num))
{
if(a[].num == a[].num)
return make_pair(level,a[].num);
else if(a[].num == a[].num)
return make_pair(level,a[].num);
}
//
level--;
if(a[].num == a[].num && a[].num == a[].num && a[].num == a[].num)
return make_pair(level,a[].num);
if(a[].num == a[].num && a[].num == a[].num && a[].num == a[].num)
return make_pair(level,a[].num);
//
level--;
if(a[].suit == a[].suit && a[].suit == a[].suit && a[].suit == a[].suit && a[].suit == a[].suit)
{
k[][tag] = a[].num;
k[][tag] = a[].num;
k[][tag] = a[].num;
k[][tag] = a[].num;
k[][tag] = a[].num;
return make_pair(level,a[].num);
}
//
level--;
for(i=;i<;i++)
{
if(a[i].num != a[i-].num+)
break;
}
if(i == )
return make_pair(level,a[].num);
//
level--;
int cnt = ;
for(i=;i>=;i--)
{
if(a[i].num == a[i+].num)
{
cnt++;
if(cnt >= )
return make_pair(level,a[i].num);
}
else
cnt = ;
}
//
level--;
if(a[].num == a[].num && a[].num == a[].num)
{
BigstPair[tag] = a[].num;
SecondPair[tag] = a[].num;
Remain[tag] = a[].num;
return make_pair(level,BigstPair[tag]);
}
if(a[].num == a[].num && a[].num == a[].num)
{
BigstPair[tag] = a[].num;
SecondPair[tag] = a[].num;
Remain[tag] = a[].num;
return make_pair(level,BigstPair[tag]);
}
if(a[].num == a[].num && a[].num == a[].num)
{
BigstPair[tag] = a[].num;
SecondPair[tag] = a[].num;
Remain[tag] = a[].num;
return make_pair(level,BigstPair[tag]);
}
//
level--;
if(a[].num == a[].num)
{
m[][tag] = a[].num;
m[][tag] = a[].num;
m[][tag] = a[].num;
m[][tag] = a[].num;
return make_pair(level,m[][tag]);
}
if(a[].num == a[].num)
{
m[][tag] = a[].num;
m[][tag] = a[].num;
m[][tag] = a[].num;
m[][tag] = a[].num;
return make_pair(level,m[][tag]);
}
if(a[].num == a[].num)
{
m[][tag] = a[].num;
m[][tag] = a[].num;
m[][tag] = a[].num;
m[][tag] = a[].num;
return make_pair(level,m[][tag]);
}
if(a[].num == a[].num)
{
m[][tag] = a[].num;
m[][tag] = a[].num;
m[][tag] = a[].num;
m[][tag] = a[].num;
return make_pair(level,m[][tag]);
}
//9 High Cards
level--;
k[][tag] = a[].num;
k[][tag] = a[].num;
k[][tag] = a[].num;
k[][tag] = a[].num;
k[][tag] = a[].num;
return make_pair(level,k[][tag]);
} int compare(pair<int,int> ka,pair<int,int> kb)
{
if(ka.first == kb.first)
{
if(ka.first == || ka.first == ) //flush or high card
{
if(k[][] == k[][])
{
if(k[][] == k[][])
{
if(k[][] == k[][])
{
if(k[][] == k[][])
{
if(k[][] == k[][])
return ;
else if(k[][] > k[][])
return ;
else
return -;
}
else if(k[][] > k[][])
return ;
else
return -;
}
else if(k[][] > k[][])
return ;
else
return -;
}
else if(k[][] > k[][])
return ;
else
return -;
}
else if(k[][] > k[][])
return ;
else
return -;
}
else if(ka.first == ) //two pair
{
if(BigstPair[] == BigstPair[])
{
if(SecondPair[] == SecondPair[])
{
if(Remain[] == Remain[])
return ;
else if(Remain[] > Remain[])
return ;
else
return -;
}
else if(SecondPair[] > SecondPair[])
return ;
else
return -;
}
else if(BigstPair[] > BigstPair[])
return ;
else
return -;
}
else if(ka.first == ) //pair
{
if(m[][] == m[][])
{
if(m[][] == m[][])
{
if(m[][] == m[][])
{
if(m[][] == m[][])
return ;
else if(m[][] > m[][])
return ;
else
return -;
}
else if(m[][] > m[][])
return ;
else
return -;
}
else if(m[][] > m[][])
return ;
else
return -;
}
else if(m[][] > m[][])
return ;
else
return -;
}
else
{
if(ka.second == kb.second)
return ;
else if(ka.second > kb.second)
return ;
else
return ;
}
}
else
{
if(ka.first > kb.first)
return ;
else if(ka.first < kb.first)
return -;
}
} int main()
{
int i,j;
char ss[][];
while(scanf("%s",ss[])!=EOF)
{
for(i=;i<;i++)
scanf("%s",ss[i]);
for(i=;i<;i++)
{
char pre = ss[i][];
char back = ss[i][];
if(pre >= '' && pre <= '')
a[i].num = pre-'';
else if(pre == 'T')
a[i].num = ;
else if(pre == 'J')
a[i].num = ;
else if(pre == 'Q')
a[i].num = ;
else if(pre == 'K')
a[i].num = ;
else if(pre == 'A')
a[i].num = ;
// 0:C 1:D 2:H 3:S
if(back == 'C')
a[i].suit = ;
else if(back == 'D')
a[i].suit = ;
else if(back == 'H')
a[i].suit = ;
else
a[i].suit = ;
}
for(i=;i<;i++)
{
char pre = ss[i][];
char back = ss[i][];
if(pre >= '' && pre <= '')
b[i-].num = pre-'';
else if(pre == 'T')
b[i-].num = ;
else if(pre == 'J')
b[i-].num = ;
else if(pre == 'Q')
b[i-].num = ;
else if(pre == 'K')
b[i-].num = ;
else if(pre == 'A')
b[i-].num = ;
// 0:C 1:D 2:H 3:S
if(back == 'C')
b[i-].suit = ;
else if(back == 'D')
b[i-].suit = ;
else if(back == 'H')
b[i-].suit = ;
else
b[i-].suit = ;
}
int res = compare(solve(a,),solve(b,));
if(res > )
puts("Black wins.");
else if(res == )
puts("Tie.");
else
puts("White wins.");
}
return ;
}
ZOJ 1111 Poker Hands --复杂模拟的更多相关文章
- ZOJ 1111 Poker Hands
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1111 A poker hand consists of 5 ca ...
- UVALive 3486/zoj 2615 Cells(栈模拟dfs)
这道题在LA是挂掉了,不过还好,zoj上也有这道题. 题意:好大一颗树,询问父子关系..考虑最坏的情况,30w层,2000w个点,询问100w次,貌似连dfs一遍都会TLE. 安心啦,这肯定是一道正常 ...
- ZOJ 3326 An Awful Problem 模拟
只有在 Month 和 Day 都为素数的时候才能得到糖 那就模拟一遍时间即可. //#pragma comment(linker, "/STACK:16777216") //fo ...
- ZOJ 2476 Total Amount 字符串模拟
- Total Amount Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Submit ...
- zoj 3314 CAPTCHA(纯模拟)
题目 有些人用深搜写的,当然我这弱弱的,只理解纯模拟... 纯模拟,第一次写了那么长的代码,我自己也是够坚韧不拔的,,,,必须留念啊!!! 注意,G包含C,E包含L,R包含P,(照图说O应该不包含C, ...
- ZOJ 2477 Magic Cube 暴力,模拟 难度:0
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1477 用IDA*可能更好,但是既然时间宽裕数据简单,而且记录状态很麻烦,就直接 ...
- [ZOJ 3839] Poker Face (递归)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3839 题目大意:画脸..每张脸是上一个脸倒过来加上眼睛.. 注意 ...
- [ZOJ 1006] Do the Untwist (模拟实现解密)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6 题目大意:给你加密方式,请你求出解密. 直接逆运算搞,用到同余定理 ...
- ZOJ 1057 Undercut(简单模拟)
Undercut 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=57 题目大意:a card game,two pla ...
随机推荐
- LinQ实战学习笔记(三) 序列,查询操作符,查询表达式,表达式树
序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...
- WCF概念
WCF 概念 WCF是.NET Framework 上灵活通讯技术.在.NET 3.0推出之前,一个企业解决方案需要几种通讯方式.对于独立于平台的通讯,使用ASP.NET Web服务.对于比较高级的 ...
- MySQL全文索引应用简明教程
本文从以下几个方面介绍下MySQL全文索引的基础知识: MySQL全文索引的几个注意事项 全文索引的语法 几种搜索类型的简介 几种搜索类型的实例 全文索引的几个注意事项 搜索必须在类型为fulltex ...
- iOS 基础日记-修饰符
今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...
- 真机测试时的错误:No matching provisioning profiles found
1.出现错误的原因是这样的---- 公司开始做项目,原来做真机测试的时候,用的是公司申请的苹果开发者账号.现在项目结束了,准备上线,但客户要求使用客户自己的苹果开发者是账号上线,于是就用客户的账号测试 ...
- 配置JDK环境变量
•配置JDK环境变量<Windows系统下> 点击我的电脑右键----->属性------>高级------>环境变量-------> 新建(建议在系统变量中新建 ...
- mysql高可用之DRBD + HEARTBEAT + MYSQL
1. 架构 Mysql: master<=slave 10.24.6.4:3306<=10.24.6.6:3306 VIP: 10.24.6.20 必须使得VIP和mysql处于同一网段, ...
- git 一般的开发流程中的代码管理
一般的开发流程中的代码管理 1. 从版本库中下载代码 git clone ssh://wenbin@192.168.1.3:29418/mustang-web 2. 针对某个feature(比如ins ...
- 《Swift开发指南》
<Swift开发指南> 基本信息 作者: 关东升 赵志荣 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115366245 上架时间:2014-8-5 出版日期:20 ...
- C#程序调用cmd执行命令
对于C#通过程序来调用cmd命令的操作,网上有很多类似的文章,但很多都不行,竟是漫天的拷贝.我自己测试整理了一下. 代码: string str = Console.ReadLine(); Syste ...