仅仅须要推断一个回合就能够了,枚举推断能够一次出全然部牌或者大过对面的牌的可能,注意的是4张同样的牌带两张牌的话是能够被炸弹炸的。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
#include <cstdlib>
#include <iomanip>
using namespace std;
struct node
{
int k,mk;
int two,mt;
int three,mth;
int four,mf;
}a[3];
int cnt1[20];
int cnt2[20];
int main()
{
char s1[20];
char s2[20];
int t;
scanf("%d",&t);
while(t--)
{
memset(cnt1,0,sizeof(cnt1));
memset(cnt2,0,sizeof(cnt2));
a[1].k=0;a[1].mk=0;
a[1].two=0;a[1].mt=0;
a[1].three=0;a[1].mth=0;
a[1].four=0;a[1].mf=0;
a[2].k=0;a[2].mk=0;
a[2].two=0;a[2].mt=0;
a[2].three=0;a[2].mth=0;
a[2].four=0;a[2].mf=0;
scanf("%s",s1);
scanf("%s",s2);
int l1,l2;
l1=strlen(s1);
l2=strlen(s2);
for(int i=0;s1[i]!='\0';i++)
{
if(s1[i]>='3'&&s1[i]<='9')
{
cnt1[s1[i]-'2']++;
}
if(s1[i]=='A')
{
cnt1[12]++;
}
if(s1[i]=='2')
{
cnt1[13]++;
}
if(s1[i]=='T')
{
cnt1[8]++;
}
if(s1[i]=='J')
{
cnt1[9]++;
}
if(s1[i]=='Q')
{
cnt1[10]++;
}
if(s1[i]=='K')
{
cnt1[11]++;
}
if(s1[i]=='X')
{
cnt1[14]++;
}
if(s1[i]=='Y')
{
cnt1[15]++;
}
}
for(int i=0;s2[i]!='\0';i++)
{
if(s2[i]>='3'&&s2[i]<='9')
{
cnt2[s2[i]-'2']++;
}
if(s2[i]=='2')
{
cnt2[13]++;
}
if(s2[i]=='A')
{
cnt2[12]++;
}
if(s2[i]=='T')
{
cnt2[8]++;
}
if(s2[i]=='J')
{
cnt2[9]++;
}
if(s2[i]=='Q')
{
cnt2[10]++;
}
if(s2[i]=='K')
{
cnt2[11]++;
}
if(s2[i]=='X')
{
cnt2[14]++;
}
if(s2[i]=='Y')
{
cnt2[15]++;
}
}
for(int i=0;i<16;i++)
{
if(cnt1[i])
{
if(cnt1[i]==1)
{
a[1].k++;
}
a[1].mk=max(a[1].mk,i);
}
if(cnt1[i]==2)
{
a[1].two++;
a[1].mt=max(a[1].mt,i);
}
if(cnt1[i]==3)
{
a[1].three++;
a[1].mth=max(a[1].mth,i);
}
if(cnt1[i]==4)
{
a[1].four++;
a[1].mf=max(a[1].mf,i);
}
}
for(int i=0;i<16;i++)
{
if(cnt2[i])
{
if(cnt2[i]==1)
{
a[2].k++;
}
a[2].mk=max(a[2].mk,i);
}
if(cnt2[i]==2)
{
a[2].two++;
a[2].mt=max(a[2].mt,i);
}
if(cnt2[i]==3)
{
a[2].three++;
a[2].mth=max(a[2].mth,i);
}
if(cnt2[i]==4)
{
a[2].four++;
a[2].mf=max(a[2].mf,i);
}
}
if(cnt1[14]&&cnt1[15])
{
//cout<<"1"<<endl;
cout<<"Yes"<<endl;
continue;
}
if((l1==1)||(l1==2&&a[1].two==1)||(l1==3&&a[1].three==1)||(l1==4&&a[1].four==1)||(l1==4&&a[1].three==1&&a[1].k==1))
{
//cout<<"4"<<endl;
cout<<"Yes"<<endl;
continue;
}
if((l1==5&&a[1].two==1&&a[1].three==1)||(l1==6&&a[1].four==1))
{
//cout<<"5"<<endl;
cout<<"Yes"<<endl;
continue;
}
if(cnt2[14]&&cnt2[15])
{
//cout<<"2"<<endl;
cout<<"No"<<endl;
continue;
}
if(a[1].mk>=a[2].mk&&a[2].four==0)
{
//cout<<"3"<<endl;
cout<<"Yes"<<endl;
continue;
}
if(a[1].two&&a[1].mt>=a[2].mt&&a[1].mt>=a[2].mth&&a[2].four==0)
{
//cout<<"6"<<endl;
cout<<"Yes"<<endl;
continue;
}
if(a[1].three&&(a[1].mth>=a[2].mth||(l1>=4&&l2==3)||(l1>=5&&(a[1].two!=0||a[1].three>1)&&a[2].two==0&&a[2].three==1))&&a[2].four==0)
{
//cout<<"7"<<endl;
cout<<"Yes"<<endl;
continue;
}
if((a[1].four&&a[1].mf>a[2].mf))
{
//cout<<"8"<<endl;
cout<<"Yes"<<endl;
continue;
}
cout<<"No"<<endl;
}
return 0;
}

HDU-4930 Fighting the Landlords 多校训练赛斗地主的更多相关文章

  1. HDU 4930 Fighting the Landlords(暴力枚举+模拟)

    HDU 4930 Fighting the Landlords 题目链接 题意:就是题中那几种牌型.假设先手能一步走完.或者一步让后手无法管上,就赢 思路:先枚举出两个人全部可能的牌型的最大值.然后再 ...

  2. HDU 4930 Fighting the Landlords(扯淡模拟题)

    Fighting the Landlords 大意: 斗地主... . 分别给出两把手牌,肯定都合法.每张牌大小顺序是Y (i.e. colored Joker) > X (i.e. Black ...

  3. 2014多校第六场 1010 || HDU 4930 Fighting the Landlords (模拟)

    题目链接 题意 : 玩斗地主,出一把,只要你这一把对方要不了或者你出这一把之后手里没牌了就算你赢. 思路 : 一开始看了第一段以为要出很多次,实际上只问了第一次你能不能赢或者能不能把牌出尽. #inc ...

  4. HDU 4930 Fighting the Landlords(模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 解题报告:斗地主,加了一个四张可以带两张不一样的牌,也可以带一对,判断打出一手牌之后,如果对手没 ...

  5. HDU 4930 Fighting the Landlords --多Trick,较复杂模拟

    题意:两个人A和B在打牌,只有题目给出的几种牌能出若A第一次出牌B压不住或者A一次就把牌出完了,那么A赢,输出Yes,否则若A牌没出完而且被B压住了,那么A输,输出No. 解法:知道规则,看清题目,搞 ...

  6. 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 ...

  7. HDU6578 2019HDU多校训练赛第一场 1001 (dp)

    HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...

  8. HDU6579 2019HDU多校训练赛第一场1002 (线性基)

    HDU6579 2019HDU多校训练赛第一场1002 (线性基) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题意: 两种操作 1.在序列末 ...

  9. HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第 ...

随机推荐

  1. HDU-1528/1962 Card Game Cheater

    两组牌中两张牌相比能赢的就连,后求最大匹配. #include <cmath> #include <cstdlib> #include <cstdio> #incl ...

  2. BZOJ 2733 [HNOI2012]永无乡 ——线段树 并查集

    用并查集维护联通块. 用线段树的合并来合并联通块. 自己YY了一个写法. #include <map> #include <cmath> #include <queue& ...

  3. P1108 低价购买 (动态规划)

    题目链接 Solution 似乎就是个很简单的最长不上升子序列输出方案. 但是有一个很艹蛋的条件: 不同方案选择价格必须不同. 且其股票价格不保证不相同. \(f[i]\) 代表以第 \(i\) 天结 ...

  4. 关于scarpy的一些说明

    一  scrapy添加代理 1 内置代理:os.environ. 固定格式,不推荐 os.environ['http_proxy'] = "http://root:woshiniba@192 ...

  5. 关于sass和less做自适应网页的区别

    less 可以这么写  @r: 15rem;   body{margin-top:40/@r}; 但是sass这么写会报错 sass应该这么写 $r: 15; body{margin-top:40re ...

  6. Fedora 14 安装完后的设置 添加源 更新软件

    1.添加源:   (1)上海交大源:应用程序->系统工具->终端 输入 su    输入密码 输入   nano /etc/yum.repos.d/sjtu.repo 辅之以下内容: [F ...

  7. bzoj 4007 树形dp

    题目大意 脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有下属,这种关系刚好组成一个 n 层的完全二叉树.公民 i 的下属是 2 * i 和 2 * i +1.最下层的公民即叶子节 ...

  8. C语言指针与数组

    C语言指针与数组 数组的下标应该从0还是1开始? 我提议的妥协方案是0.5,可惜他们未予认真考虑便一口回绝    -- Stan Kelly-Bootle   1. 数组并非指针 为什么很多人会认为指 ...

  9. 【CF1020A】New Building for SIS(签到)

    题意: 有n栋楼,从一栋楼某个地方,到大另一栋楼的某个地方,每栋楼给了连接楼的天桥,每走一层或者穿个一栋楼花费一分钟,求出起点到大目的点最少花费的时间 n,h<=1e8,q<=1e4 思路 ...

  10. 洛谷—— P2117 小Z的矩阵

    https://www.luogu.org/problemnew/show/2117 题目描述 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1 ...