题意:

       模拟斗地主,出牌有一下规则,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. cpu缓存和volatile

    目录 CPU缓存的由来 CPU缓存的概念 CPU缓存的意义 缓存一致性协议-MESI协议 Store Buffers Store Forwarding Memory Barriers Invalida ...

  2. 京东数科面试真题:常见的 IO 模型有哪些?Java 中的 BIO、NIO、AIO 有啥区别?

    本文节选自<Java面试进阶指北 打造个人的技术竞争力> 面试中经常喜欢问的一个问题,因为通过这个问题,面试官可以顺便了解一下你的操作系统的水平. IO 模型这块确实挺难理解的,需要太多计 ...

  3. 【LeetCode】2020-03 每日一题

    121. 买卖股票的最佳时机(简单) [分类]:模拟.思维 [题解]:可以用O(n)的复杂度完成,只需要在遍历的时候记录到当前位置为止买入股票的最小价格minn,再维护一个当前卖出股票价(a-minn ...

  4. Jmeter socket接口测试

    一.Socket简介 什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把 TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程 ...

  5. sqli-labs系列——第五关

    less5 更改id后无果,不能用union联合查询 此处用报错注入 报错注入的概念:(1). 通过floor报错 and (select 1 from (select count(*),concat ...

  6. Centos7安装nexus(maven私服)以及maven的相关配置

    一.nexus安装: 1.获取nexus下载地址: 查询nexus最新版本地址:https://help.sonatype.com/repomanager3/download 当前最新版本为nexus ...

  7. 自己挖的坑自己填--jxl进行Excel下载堆内存溢出问题

    今天在进行使用 jxl 进行 Excel 下载时,由于数据量大(4万多条接近5万条数据的下载),数据结构过于负责,存在大量大对象(虽然在对象每次用完都设置为null,但还是存在内存溢出问题),加上本地 ...

  8. Java应用性能瓶颈分析思路

    1 问题描述 因产品架构的复杂性,可能会导致性能问题的因素有很多.根据部署架构,大致的可以分为应用端瓶颈.数据库端瓶颈.环境瓶颈三大类.可以根据瓶颈的不同部位,选择相应的跟踪工具进行跟踪分析. 应用层 ...

  9. 深入理解Java并发框架AQS系列(四):共享锁(Shared Lock)

    深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 深入理解Java并发框架AQS系列(三):独占锁(Exclusive Lock) 深入 ...

  10. 【10.5NOIP普及模拟】sort

    [10.5NOIP普及模拟]sort 文章目录 [10.5NOIP普及模拟]sort 题目描述 输入 输出 输入输出样例 样例输入 样例输出 数据范围限制 解析 code 题目描述 小x和小y是好朋友 ...