题意:

       模拟斗地主,出牌有一下规则,1张,1对,3张,3带1,3带2,炸弹(包括两个猫),4带2,这写规则,没有其他的,然后给你两幅牌,只要第一个人出了一次牌对方管不上,那么或者第一个人一次把牌都出光了,就算胜利,否则第一个人失败,记住,只出一次牌。

思路:

       把所有的状态都模拟,每次都找出当前状态的最大值,如果对方管不上,那么就赢了,其他的就是注意点细节,比如大猫和小猫,还有就是炸弹什么的,今天做了一下午这个题目,敲了很多便都wa了,后来查出来竟然是自己不了解规则,我之前一直以为4带2必须用4带2去管,不能炸,结果今天问了他们才知道,4带2已经不是炸弹了,可以直接随便拿一个炸弹炸了,哎!斗地主都不会玩,颜面何存啊!


#include<stdio.h>
#include<string.h>

int
k1[500] ,k2[500];
int
pai[20];
char
str1[25] ,str2[25]; void ini()
{

pai[1] = 'Y' ,pai[2] = 'X' ,pai[3] = '2' ,pai[4] = 'A' ,pai[5] = 'K';
pai[6] = 'Q' ,pai[7] = 'J' ,pai[8] = 'T' ,pai[9] = '9' ,pai[10] = '8';
pai[11] = '7' ,pai[12] = '6' ,pai[13] = '5' ,pai[14] = '4' ,pai[15] = '3';
} int main ()
{

ini();
int
t ,l1 ,l2 ,ok ,A ,XY ,i ,j ,Z;
scanf("%d" ,&t);
while(
t--)
{

scanf("%s" ,str1) ,scanf("%s" ,str2);
l1 = strlen(str1) ,l2 = strlen(str2);
memset(k1 ,0 ,sizeof(k1));
memset(k2 ,0 ,sizeof(k2));
for(
i = 0 ;i < l1 ;i ++)
k1[str1[i]] ++;
for(
i = 0 ;i < l2 ;i ++)
k2[str2[i]] ++;
if(
k1['X'] && k1['Y'])
{

puts("Yes");
continue;
}

k2['X'] && k2['Y'] ? XY = Z = 1 : XY = 0;
ok = Z = A = 0;
for(
i = 1 ;i <= 15 ;i ++)
if(
k2[pai[i]] >= 4) Z = 1;
// 1
for(i = 1 ;i <= 15 ;i ++)
{
if(
k1[pai[i]] >= 1)
{
if(
l1 == 1) A = 1;
int
tmp = 0;
for(
j = 1 ;j < i ;j ++)
if(
k2[pai[j]] >= 1) tmp = 1;
if(!
tmp && !Z) ok = 1;
break;
}
}

// 2
for(i = 1 ;i <= 15 ;i ++)
{
if(
k1[pai[i]] >= 2)
{
if(
l1 == 2) A = 1;
int
tmp = 0;
for(
j = 1 ;j < i ;j ++)
if(
k2[pai[j]] >= 2) tmp = 1;
if(!
tmp && !Z) ok = 1;
break;
}
}

//3
for(i = 1 ;i <= 15 ;i ++)
{
if(
k1[pai[i]] >= 3)
{
if(
l1 == 3) A = 1;
int
tmp = 0;
for(
j = 1 ;j < i ;j ++)
if(
k2[pai[j]] >= 3) tmp = 1;
if(!
tmp && !Z) ok = 1;
break;
}
}

//3-1
for(i = 1 ;i <= 15 ;i ++)
{
if(
k1[pai[i]] >= 3 && l1 >= 4)
{
if(
l1 == 4) A = 1;
int
tmp = 0;
for(
j = 1 ;j < i ;j ++)
if(
k2[pai[j]] >= 3 && l2 >= 4) tmp = 1;
if(!
tmp && !Z) ok = 1;
break;
}
}

//3-2
int tt1 = 0 ,tt2 = 0;
for(
i = 1 ;i <= 15 ;i ++)
{
if(
k1[pai[i]] >= 2) tt1 ++;
if(
k2[pai[i]] >= 2) tt2 ++;
} for(
i = 1 ;i <= 15 ;i ++)
{
if(
k1[pai[i]] >= 3 && tt1 >= 2)
{
if(
l1 == 5) A = 1;
int
tmp = 0;
for(
j = 1 ;j < i ;j ++)
if(
k2[pai[j]] >= 3 && tt2 >= 2) tmp = 1;
if(!
tmp && !Z) ok = 1;
break;
}
}
//4
for(i = 1 ;i <= 15 ;i ++)
{
if(
k1[pai[i]] >= 4)
{
if(
l1 == 4) A = 1;
int
tmp = 0;
for(
j = 1 ;j < i ;j ++)
if(
k2[pai[j]] >= 4) tmp = 1;
if(!
tmp) ok = 1;
}
}

//4-2
for(i = 1 ;i <= 15 ;i ++)
{
if(
k1[pai[i]] >= 4 && l1 >= 6)
{
if(
l1 == 6) A = 1;
int
tmp = 0;
for(
j = 1 ;j < i ;j ++)
if(
k2[pai[j]] >= 4 && l2 >= 6) tmp = 1;
if(!
tmp && !Z) ok = 1;
break;
}
}
if(
A) ok = 1;
if(!
A && XY) ok = 0;
ok ? puts("Yes") : puts("No");
}
return
0;
}

hdu4930 模拟斗地主的更多相关文章

  1. Java基础知识强化之集合框架笔记71:模拟斗地主洗牌和发牌并对牌进行排序的案例

    1. 模拟斗地主洗牌和发牌并对牌进行排序的原理图解: 2. 代码实现: 思路: • 创建一个HashMap集合 • 创建一个ArrayList集合 • 创建花色数组和点数数组 • 从0开始往HashM ...

  2. Java基础知识强化之集合框架笔记70:模拟斗地主洗牌和发牌(ArrayList)

    1. 模拟斗地主洗牌和发牌 分析:     A:创建一个牌盒     B:装牌     C:洗牌     D:发牌     E:看牌 2. 代码实现: package cn.itcast_03; im ...

  3. Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

    1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:          * 将键映射到值的对象          * 一个映射不能包含重复的键          * 每个键最多 ...

  4. 模拟斗地主和学生管理系统 IO 版

    1.模拟斗地主 public class PlayCards { public static void main(String[] args) { String[] color = {"黑桃 ...

  5. Java 模拟斗地主

    模拟斗地主 public class M1 { public static void main(String args[]) { DouDiZhu02(); } private static void ...

  6. java 模拟斗地主发牌洗牌

    一 模拟斗地主洗牌发牌 1.案例需求 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张 ...

  7. 2014 HDU多校弟六场J题 【模拟斗地主】

    这是一道5Y的题目 有坑的地方我已在代码中注释好了 QAQ Ps:模拟题还是练的太少了,速度不够快诶 //#pragma comment(linker, "/STACK:16777216&q ...

  8. java模拟斗地主发牌看牌

    import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class Dou ...

  9. Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)

    规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java ...

随机推荐

  1. 【HTB系列】 Lame

    出品|MS08067实验室(www.ms08067.com) 本文作者:shavchen 01 前言 这次挑战的靶机是Lame,距今900天+,历史感十足 靶机描述 Lame is a beginne ...

  2. Java 常见对象 02

    常见对象·String类 Scanner 的概述和方法介绍 * A:Scanner 的概述 * B:Scanner 的构造方法原理 * Scanner(InputStream source) * Sy ...

  3. 大数据实战-Hive-技巧实战

    1.union 和 union all 前者可以去重 select sex,address from test where dt='20210218' union all select sex,add ...

  4. phpMyAdmin Transformation 任意文件包含/远程代码执行漏洞

    漏洞参考 https://yq.aliyun.com/articles/679633 国外提供了一个在线测试的靶场     默认密码  root  toor https://www.vsplate.c ...

  5. rest framework Genericview

    通用视图 Django的通用视图...被开发为普通使用模式的快捷方式......他们采取某些共同的习惯和模式的发展观和抽象,从而使您可以快速地将数据写入的共同看法,而不必重复自己发现的. - Djan ...

  6. 过多if - else 的问题, 以及策略模式 + 反射解决方法

    策略模式解决if - else 的代码 业务场景: 外包企业的审批人需要审批打卡的场景: 审批人分为多种不同的级别,多种级别中具有方式相同但是内容不同的操作:审批. 原来场景: 有前端传来审批人参数, ...

  7. 任务4 PHP扩展模块安装

    /usr/local/php/bin/php -m //如何查看PHP加载了哪些模块 #cd  /usr/local/src #wget http://pecl.php.net/get/redis-2 ...

  8. POJ3278_Catch That Cow(JAVA语言)

    思路:bfs裸题.三个选择:向左一个单位,向右一个单位,向右到2*x //注意,需要特判n是否大于k,大于k时只能向左,输出n-k.第一次提交没注意,结果RE了,, Catch That Cow Ti ...

  9. Android studio 简易登录界面

    •参考资料 [1]:视频资源 [2]:Android TextView设置图标,调整图标大小 •效果展示图 •前置知识 TextView EditText Button 以及按压效果,点击事件 •出现 ...

  10. Android Studio中Switch控件有关 thumb 和 track 用法

    •任务 •属性 android:track:底部的图片(灰->绿) android:thumb:设置 Switch 上面滑动的滑块,也就是上图中的白色圆形滑块 •switch_thumb 点击 ...