本场比赛的三个水题之一,题意是两个玩家每人都持有一手牌,问第一个玩家是否有一种出牌方法使得在第一回和对方无牌可出。直接模拟即可,注意一次出完的情况,一开始没主意,wa了一发。

#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char s[3][30];
int player[4][30];
int hashCard(char ch){
if(ch >= '3' && ch <= '9') return ch-'0'-3;
if(ch == 'T') return 7;
if(ch == 'J') return 8;
if(ch == 'Q') return 9;
if(ch == 'K') return 10;
if(ch == 'A') return 11;
if(ch == '2') return 12;
if(ch == 'X') return 13;
if(ch == 'Y') return 14;
}
void init(int idx){
int len = strlen(s[idx]);
memset(player[idx],0,sizeof player[idx]);
for(int i = 0;i < len;i ++) player[idx][hashCard(s[idx][i])] ++;
}
int cntNum(int idx,int num){
int ret = 0;
for(int i = 0;i < 20 ;i ++)
if(player[idx][i] == num) ret++;
return ret;
}
bool isHaveCnt(int idx,int cnt){
for(int i = 0;i < 20;i ++)
if(player[idx][i] == cnt) return true;
return false;
}
bool checkOneToFour(int cnt){
bool ret = false;
for(int i = 20;i >= 0;i --){
int flag = 0;
if(player[1][i] < cnt) continue;
for(int j = 20;j >= 0;j --){
if(player[2][j] < cnt) continue;
if(j > i){
flag = 1;
break;
}
}
if(flag == 1) break;
ret = true;
break;
}
if(cntNum(1,cnt) &&ret == true && !isHaveCnt(2,4)) return true;
return false;
}
bool isWin(){
if(player[1][13] && player[1][14]) return true;
if(player[2][13] && player[2][14]) return false;
for(int i = 1;i <= 4;i ++)
if(checkOneToFour(i)) return true;
if(!isHaveCnt(1,4) && isHaveCnt(2,4)) return false;
int len1 = strlen(s[1]);
int len2 = strlen(s[2]);
if(len1 <= len2) return false;
if(isHaveCnt(1,3)){
if(len2 == 3) return true;
if((isHaveCnt(1,2) || cntNum(1,3) >1) && !isHaveCnt(2,2) && cntNum(2,3) < 2) return true;
}else if(isHaveCnt(1,4)){
if(len1 == 6) return true;
else return false;
}
return false;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s%s",s[1],s[2]);
init(1),init(2);
int flag(0);
int len = strlen(s[1]);
if(len <= 6){
if(len == 1) printf("Yes\n"),flag = 1;
if(len == 2){
if(cntNum(1,2)) printf("Yes\n"),flag = 1;
}else if(len == 3){
if(cntNum(1,3)) printf("Yes\n"),flag = 1;
}else if((isHaveCnt(1,4) && len != 5) || (isHaveCnt(1,3) && len != 5)) printf("Yes\n"),flag = 1;
else if(len == 5){
if(cntNum(1,2) == 1 && cntNum(1,3) == 1) printf("Yes\n"),flag = 1;
}
}
if(flag) continue;
if(isWin()) printf("Yes\n");
else printf("No\n");
}
return 0;
}

2014 多校联合训练赛6 Fighting the Landlords的更多相关文章

  1. HDU 4869 Turn the pokers (2014多校联合训练第一场1009) 解题报告(维护区间 + 组合数)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. hdu 5381 The sum of gcd 2015多校联合训练赛#8莫队算法

    The sum of gcd Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) T ...

  3. 2015多校联合训练赛 Training Contest 4 1008

    构造题: 比赛的时候只想到:前面一样的数,后面 是类似1,2,3,4,5,6....t这 既是:t+1,t+1...,1,2,3,...t t+1的数目 可能 很多, 题解时YY出一个N 然后对N   ...

  4. hdu 5358 First One 2015多校联合训练赛#6 枚举

    First One Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  5. hdu 5361 2015多校联合训练赛#6 最短路

    In Touch Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total ...

  6. HDU 5358(2015多校联合训练赛第六场1006) First One (区间合并+常数优化)

    pid=5358">HDU 5358 题意: 求∑​i=1​n​​∑​j=i​n​​(⌊log​2​​S(i,j)⌋+1)∗(i+j). 思路: S(i,j) < 10^10 & ...

  7. 2015多校联合训练赛 hdu 5308 I Wanna Become A 24-Point Master 2015 Multi-University Training Contest 2 构造题

    I Wanna Become A 24-Point Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 ...

  8. 2015多校联合训练赛hdu 5301 Buildings 2015 Multi-University Training Contest 2 简单题

    Buildings Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  9. HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&#39;s problem(manacher+二分/枚举)

    pid=5371">HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称. 如今给你一个长为n(n<10^5)的序 ...

随机推荐

  1. 【BZOJ 2654】tree

    Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...

  2. WebUploader API

    Uploader new Uploader( opts ) ⇒ Uploader 上传入口类. var uploader = WebUploader.Uploader({ swf: 'path_of_ ...

  3. spring +hibernate 启动优化【转】

    最近在负责一个大项目,项目组成员包括项目经理大概10个人左右.项目技术用struts+spring+hibernate实现.项目的规模相对来说是比较大的,总共有10大模块,每个大模块又分为有十几个.甚 ...

  4. 解决position:relative情况下,z-index无效的方法

    在实际开发中,div+css经常会碰到层级的问题 其中有个很头痛的就是z-index控制层级时,老是发现z-index不起作用 老杨依据自己的经验,总结出以下步骤: 1.判断被覆盖的层(想要置顶的层) ...

  5. 认识OD的两种断点

    OllyDBG从原理上来区分,有两种不同的断点:软件断点和硬件断点. 也许会有朋友说那不是还有内存断点吗? 内存断点严格来说是属于一种特殊的软件断点. 内存断点: 内存断点每次只能设置一个,假如你设置 ...

  6. FaceNet--Google的人脸识别(转)

    引入 随着深度学习的出现,CV领域突破很多,甚至掀起了一股CV界的创业浪潮,当次风口浪尖之时,Google岂能缺席.特贡献出FaceNet再次刷新LFW上人脸验证的效果记录. 本文是阅读FaceNet ...

  7. 用css制作三角形

    用css制作三角形,主要是利用css元素给“盒模型”设置边框得到的. 上图,上边框和做边框,以及上边框和右边框的交合处,浏览器会按照直角的二分之一处绘制交合线.这是“盒模型”有宽和高时候的效果.我们假 ...

  8. Python/Ruby/Go/Node 之四国大战

    Python Flask vs Ruby Sinatra vs Go Martini vs Node Express 本文授权转载自 zybuluo 博客. 题外话一: 最近一段时间,Cloud In ...

  9. Visual C++ unicode and utf8 转换

    ATL宏: USES_CONVERSION; W2A A2W CString StringUtil::UTF8_to_UNICODE(const char *utf8_string, int leng ...

  10. POJ2528+线段树

    见代码. /* 线段树+Lazy 题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度. 现在往墙上贴N张海报,每张海报的宽度是任意的,但是必定是单位宽度的整数倍,且<=1QW. 后贴的海 ...