HDU 4930 Fighting the Landlords(扯淡模拟题)
大意:
斗地主。。。
。
分别给出两把手牌,肯定都合法。每张牌大小顺序是Y (i.e. colored Joker) > X (i.e. Black & White Joker) > 2 > A (Ace) > K (King) > Q (Queen) > J (Jack) > T (10) > 9 > 8 > 7 > 6 > 5 > 4 > 3。
给你8种组合:1.单牌:一张牌
2.对子:两张同样的牌
3.三重奏(百度翻译出来的。
。
):三张同样的牌
4.三带一:三张同样的带一张牌(大小仅仅考虑前面的牌,不考虑带的)
5.三带二:三张同样的带两张牌,带的两张牌能够一样,也能够不一样(大小仅仅考虑前面的牌,不考虑带的)
6.四带二:四个同样的带两张牌。带的两张牌能够一样。也能够不一样(大小仅仅考虑前面的牌,不考虑带的)
7.炸弹:四个同样的一起出,不带不论什么东西(能管除了核弹全部的)
8.核弹:大小王一起(能管全部的牌)
然后规则事实上非常easy,就是你先出,假设你出了之后。手牌没有了,输出Yes,或者你出了之后。对方没有比你出的这一把大的,也输出Yes,剩下就是输出No了。。
。
思路:
比赛的时候一直卡1007,T到死。
。。。也没来的及管这个题。。事实上不难。。
主要注意几个坑的地方即可:
1.不能四带一。
2.炸弹能够干掉四带二
3.理解好题意什么时候输出Yes
发这篇博客的目的不是粘代码。代码写的实在是太挫了。
。
。。
要看的话仅仅看题目描写叙述吧。。。
。就是想记录一下这个题-。-
我好无聊~
#include <stdio.h>
#include <string.h> int Hash1[20], Hash2[20];
int T;
char s1[20], s2[20]; int main()
{
scanf("%d", &T);
while(T--){
memset(Hash1, 0, sizeof(Hash1));
memset(Hash2, 0, sizeof(Hash2));
scanf("%s", s1);
int len1 = strlen(s1);
for(int i = 0; i < len1; ++i){
if(s1[i] >= '3' && s1[i] <= '9'){
Hash1[s1[i]-'0']++;
}
else if(s1[i] == 'T'){
Hash1[10]++;
}
else if(s1[i] == 'J'){
Hash1[11]++;
}
else if(s1[i] == 'Q'){
Hash1[12]++;
}
else if(s1[i] == 'K'){
Hash1[13]++;
}
else if(s1[i] == 'A'){
Hash1[14]++;
}
else if(s1[i] == '2'){
Hash1[15]++;
}
else if(s1[i] == 'X'){
Hash1[16]++;
}
else if(s1[i] == 'Y'){
Hash1[17]++;
}
}
// for(int i = 3; i <= 17; ++i){
// printf("%d ", Hash1[i]);
// }
scanf("%s", s2);
int len2 = strlen(s2);
for(int i = 0; i < len2; ++i){
if(s2[i] >= '3' && s2[i] <= '9'){
Hash2[s2[i]-'0']++;
}
else if(s2[i] == 'T'){
Hash2[10]++;
}
else if(s2[i] == 'J'){
Hash2[11]++;
}
else if(s2[i] == 'Q'){
Hash2[12]++;
}
else if(s2[i] == 'K'){
Hash2[13]++;
}
else if(s2[i] == 'A'){
Hash2[14]++;
}
else if(s2[i] == '2'){
Hash2[15]++;
}
else if(s2[i] == 'X'){
Hash2[16]++;
}
else if(s2[i] == 'Y'){
Hash2[17]++;
}
}
// for(int i = 3; i <= 17; ++i){
// printf("%d ", Hash2[i]);
// }
if(Hash1[16] == 1 && Hash1[17] == 1){
printf("Yes\n");
continue;
} ///clear
int cnt = 0;
for(int i = 3; i <= 17; ++i){
if(Hash1[i] > 0){
cnt++;
}
}
if(cnt == 1){
printf("Yes\n");
continue;
}
else if(cnt == 2){
int t1 = 0, t2 = 0;
for(int i = 3; i <= 17; ++i){
if(Hash1[i] > 0){
if(t1 == 0){
t1 = i;
}
else {
t2 = i;
}
}
}
if(Hash1[t1] == 3 && Hash1[t2] == 1){
printf("Yes\n");
continue;
}
if(Hash1[t2] == 3 && Hash1[t1] == 1){
printf("Yes\n");
continue;
}
if(Hash1[t1] == 3 && Hash1[t2] == 2){
printf("Yes\n");
continue;
}
if(Hash1[t2] == 3 && Hash1[t1] == 2){
printf("Yes\n");
continue;
}
if(Hash1[t1] == 4 && Hash1[t2] == 2){
printf("Yes\n");
continue;
}
if(Hash1[t2] == 4 && Hash1[t1] == 2){
printf("Yes\n");
continue;
}
}
else if(cnt == 3){
int t1 = 0, t2 = 0, t3 = 0;
for(int i = 3; i <= 17; ++i){
if(Hash1[i] > 0){
if(t1 == 0){
t1 = i;
}
else if(t2 == 0){
t2 = i;
}
else {
t3 = i;
}
}
}
if(Hash1[t1] == 4 && Hash1[t2] == 1 && Hash1[t3] == 1){
printf("Yes\n");
continue;
}
else if(Hash1[t1] == 1 && Hash1[t2] == 4 && Hash1[t3] == 1){
printf("Yes\n");
continue;
}
else if(Hash1[t1] == 1 && Hash1[t2] == 1 && Hash1[t3] == 4){
printf("Yes\n");
continue;
}
} if(Hash2[16] == 1 && Hash2[17] == 1){
printf("No\n");
continue;
} bool flag = false;
///bomb
for(int i = 15; i >= 3; --i){
if(Hash1[i] == 4){
int j;
for(j = i+1; j <= 15; ++j){
if(Hash2[j] == 4){
break;
}
}
if(j == 16){
flag = true;
}
}
}
if(flag){
printf("Yes\n");
continue;
} ///Four-Dual
for(int i = 15; i >= 3; --i){
if(Hash1[i] == 4 && len1 >= 6){
int j;
for(j = i+1; j <= 15; ++j){
if(Hash2[j] == 4 && len2 >= 6){
break;
}
}
int k;
for(k = 3; k <= 15; ++k){
if(Hash2[k] == 4){
break;
}
}
if(j == 16 && k == 16){
flag = true;
//printf("Four-Dual\n");
}
}
}
if(flag){
printf("Yes\n");
continue;
} ///Trio-Pair
for(int i = 15; i >= 3; --i){
if(Hash1[i] == 3){
for(int j = 3; j <= 15; ++j){
if(Hash1[j] == 2){
int k;
int t = 0;
for(k = i+1; k <= 15; ++k){
if(Hash2[k] == 3){
for(int l = 3; l <= 15; ++l){
if(Hash2[l] == 2){
t = 1;
break;
}
}
if(t == 1){
break;
}
}
}
int p;
for(p = 3; p <= 15; ++p){
if(Hash2[p] == 4){
break;
}
}
if(k == 16 && p == 16){
flag = true;
//printf("Trio-Pair\n");
}
}
}
}
}
if(flag){
printf("Yes\n");
continue;
} ///Trio-Solo
for(int i = 15; i >= 3; --i){
if(Hash1[i] == 3 && len1 >= 4){
int j;
for(j = i+1; j <= 15; ++j){
if(Hash2[j] == 3 && len2 >= 4){
break;
}
}
int k;
for(k = 3; k <= 15; ++k){
if(Hash2[k] == 4){
break;
}
}
if(j == 16 && k == 16){
flag = true;
//printf("Trio-Solo\n");
}
}
}
if(flag){
printf("Yes\n");
continue;
} ///Trio
for(int i = 15; i >= 3; --i){
if(Hash1[i] == 3){
int j;
for(j = i+1; j <= 15; ++j){
if(Hash2[j] >= 3){
break;
}
}
int k;
for(k = 3; k <= 15; ++k){
if(Hash2[k] == 4){
break;
}
}
if(j == 16 && k == 16){
flag = true;
//printf("Trio\n");
}
}
}
if(flag){
printf("Yes\n");
continue;
} ///Pair
for(int i = 15; i >= 3; --i){
if(Hash1[i] == 2){
int j;
for(j = i+1; j <= 15; ++j){
if(Hash2[j] >= 2){
break;
}
}
int k;
for(k = 3; k <= 15; ++k){
if(Hash2[k] == 4){
break;
}
}
if(j == 16 && k == 16){
flag = true;
//printf("Pair\n");
}
}
}
if(flag){
printf("Yes\n");
continue;
} ///Solo
for(int i = 17; i >= 3; --i){
if(Hash1[i] == 1){
int j;
for(j = i+1; j <= 17; ++j){
if(Hash2[j] >= 1){
break;
}
}
int k;
for(k = 3; k <= 15; ++k){
if(Hash2[k] == 4){
break;
}
}
if(j == 18 && k == 16){
flag = true;
//printf("Solo\n");
}
}
}
if(flag){
printf("Yes\n");
continue;
}
printf("No\n");
} return 0;
}
HDU 4930 Fighting the Landlords(扯淡模拟题)的更多相关文章
- HDU 4930 Fighting the Landlords(暴力枚举+模拟)
HDU 4930 Fighting the Landlords 题目链接 题意:就是题中那几种牌型.假设先手能一步走完.或者一步让后手无法管上,就赢 思路:先枚举出两个人全部可能的牌型的最大值.然后再 ...
- HDU 4930 Fighting the Landlords(模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 解题报告:斗地主,加了一个四张可以带两张不一样的牌,也可以带一对,判断打出一手牌之后,如果对手没 ...
- HDU 4930 Fighting the Landlords --多Trick,较复杂模拟
题意:两个人A和B在打牌,只有题目给出的几种牌能出若A第一次出牌B压不住或者A一次就把牌出完了,那么A赢,输出Yes,否则若A牌没出完而且被B压住了,那么A输,输出No. 解法:知道规则,看清题目,搞 ...
- 2014多校第六场 1010 || HDU 4930 Fighting the Landlords (模拟)
题目链接 题意 : 玩斗地主,出一把,只要你这一把对方要不了或者你出这一把之后手里没牌了就算你赢. 思路 : 一开始看了第一段以为要出很多次,实际上只问了第一次你能不能赢或者能不能把牌出尽. #inc ...
- hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 Fighting the Landlords Time Limit: 2000/1000 MS ...
- hdu 5641 King's Phone(暴力模拟题)
Problem Description In a military parade, the King sees lots of new things, including an Andriod Pho ...
- hdu 2629 Identity Card (字符串解析模拟题)
这题是一个字符串模拟水题,给12级学弟学妹们找找自信的,嘿嘿; 题目意思就是要你讲身份证的上的省份和生日解析出来输出就可以了: http://acm.hdu.edu.cn/showproblem.ph ...
- hdu 5083 Instruction (稍比较复杂的模拟题)
题意: 二进制指令转汇编指令,汇编指令转二进制指令. 思路: 额,条理分好,想全,思维不能乱. 代码: int findyu(char yu[50],char c){ int l=strlen(yu) ...
- hdu4930 Fighting the Landlords(模拟 多校6)
题目链接:pid=4930">http://acm.hdu.edu.cn/showproblem.php? pid=4930 Fighting the Landlords Time L ...
随机推荐
- Python之Django框架
1.Django简介 Python下有多款不同的 Web 框架,Django是最有代表性的一种.许多成功的网站和APP都基于Django. Django是一个开源的Web应用框架,由Python写成. ...
- 【HDOJ1828&&POJ1177】Picture(线段树,扫描线)
题意:给定n个矩形,求他们的并的周长 n<=5e3,abs(x[i])<=1e4 思路:From https://www.cnblogs.com/kuangbin/archive/2013 ...
- .NET抓取数据范例 抓取页面上所有的链接
原文发布时间为:2009-11-15 -- 来源于本人的百度文章 [由搬家工具导入] .NET抓取数据范例 抓取页面上所有的链接 前台: <%@ Page Language="C#&q ...
- [LeetCode] Search a 2D Matrix 二分搜索
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- 老郭带你学数据结构(C语言系列)1-线性表之静态顺序表
在学习之前,先说下我的软件情况,操作系统是manjaro linux 今天刚刚升级的,编辑器是vim8.0.55,编译器是gcc 6.2.1,调试器是gdb 7.12,版本再低点也可以,只要gcc版本 ...
- TP5 多条件whereOr查询
问题背景:最近在用ThinkPHP 5开发项目的过程中,发现根据筛选条件做or查询的时候,连贯操作不可以使用where进行条件查询了. 首先列出一个user数据表的信息: uid uname grad ...
- openshift scc解析
SCC使用UserID,FsGroupID以及supplemental group ID和SELinux label等策略,通过校验Pod定义的ID是否在有效范围内来限制pod的权限.如果校验失败,则 ...
- Cocos 2d-X Lua游戏开发Mac环境搭建以及一点点感悟
接触Cocos2d-x 最近由于公司项目的需要,自己开始接触Cocos,开始做一些简单的轻量级的游戏,以前没有接触过这一块的东西,也是借助这个机会学习一下游戏的开发,由于以前自己接触的全都是iOS和A ...
- java 两个int类型的数据相除并输出百分号保留两位有效数字
java代码: public void IntA(int a , int b){ //首先判断分母不能为0 if(b!=0){ folat num = (float) a*100/b; Decimal ...
- 前台页面获取servlet传过来的数据
servlet中的代码: public void doGet(HttpServletRequest request, HttpServletResponse response) throws Serv ...