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(扯淡模拟题)的更多相关文章

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

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

  2. HDU 4930 Fighting the Landlords(模拟)

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

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

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

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

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

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

  6. hdu 5641 King's Phone(暴力模拟题)

    Problem Description In a military parade, the King sees lots of new things, including an Andriod Pho ...

  7. hdu 2629 Identity Card (字符串解析模拟题)

    这题是一个字符串模拟水题,给12级学弟学妹们找找自信的,嘿嘿; 题目意思就是要你讲身份证的上的省份和生日解析出来输出就可以了: http://acm.hdu.edu.cn/showproblem.ph ...

  8. hdu 5083 Instruction (稍比较复杂的模拟题)

    题意: 二进制指令转汇编指令,汇编指令转二进制指令. 思路: 额,条理分好,想全,思维不能乱. 代码: int findyu(char yu[50],char c){ int l=strlen(yu) ...

  9. hdu4930 Fighting the Landlords(模拟 多校6)

    题目链接:pid=4930">http://acm.hdu.edu.cn/showproblem.php? pid=4930 Fighting the Landlords Time L ...

随机推荐

  1. Vue中slot内容分发

    <slot>元素是一个内容分发API,使用多个内容插槽时可指定name属性 <!DOCTYPE html> <html> <head> <meta ...

  2. pat 团体天梯赛 L2-001. 紧急救援

    L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...

  3. POJ3687 Labeling Balls

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13645   Accepted: 3955 Description Wind ...

  4. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---21

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  5. 项目中使用libsodium扩展

    前段时间研究了微信小微商户,地址:https://pay.weixin.qq.com/wiki/doc/api/xiaowei.php?chapter=19_11 其接口操作中需要下载证书针对返回的密 ...

  6. JMeter特殊情况二:针对某些请求数据每次请求都是变化的情况

    概要:某些post请求,例如,登录的请求除了有我们再页面上需要输入的一些值(用户名.密码.是否记住密码等)之外,还有其他的参数,例如token等等,而且这些参数不固定,也就是说每一次post请求这些参 ...

  7. 批量去掉文件中的^M

    "^M"在Linux下的输入方法 ctrl v + ctrl m 方案一: find -type f | xargs sed -i 's/^M//g' 或者 find -name ...

  8. 深入浅出 Cocoa 之 Core Data(2)- 手动编写代码

    深入浅出 Cocoa 之 Core Data(2)- 代码示例 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 前面详细讲解了 Core Data 的框 ...

  9. Autolayout 03

    Debugging in Code 有两个调试layout问题的阶段. 1. Map from “this view is in the wrong place” to “this constrain ...

  10. 11G在用EXP导出时,空表不能导出

    11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segmen ...