HDU 4930 Fighting the Landlords(扯淡模拟题)
来源:互联网 发布:tcp ip协议 端口 编辑:程序博客网 时间:2024/05/01 11:51
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.核弹:大小王一起(能管所有的牌)
然后规则其实很简单,就是你先出,如果你出了之后,手牌没有了,输出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(扯淡模拟题)
- hdu 4930 Fighting the Landlords (模拟)
- HDU 4930-Fighting the Landlords(模拟)
- hdu 4930 Fighting the Landlords(模拟)
- hdu 4930 Fighting the Landlords(模拟)
- HDU 4930 Fighting the Landlords 模拟
- Hdu 4930 Fighting the Landlords 简单模拟
- hdu 4930 Fighting the Landlords (模拟)
- HDU 4930 Fighting the Landlords 模拟
- HDU 4930 : Fighting the Landlords(模拟)
- hdu 4930 Fighting the Landlords
- hdu 4930 Fighting the Landlords
- Fighting the Landlords HDU - 4930
- HDU 4930 Fighting the Landlords(暴力枚举+模拟)
- HDU 4930 Fighting the Landlords --多Trick,较复杂模拟
- HDU 4930 Fighting the Landlords 斗地主模拟
- 假期训练—— HDU - 4930 Fighting the Landlords 模拟
- hdu 4930 Fighting the Landlords(多校6 1010)
- 矩阵十题【三】 HDU 1588 Gauss Fibonacci
- 取数值的绝对值
- Netlink Socket
- Oracle笔记 之 工具
- manacher 求最长回文子串
- HDU 4930 Fighting the Landlords(扯淡模拟题)
- Tyvj 1004 滑雪~
- 【Linux】GDB调试演示过程
- 函数模板
- Android系统编译时遇到的几个.mk的疑惑。
- LightOJ 1216 圆锥体积
- hdu 4925 Apple Tree--2014 Multi-University Training Contest 6
- Fermat’s Chirstmas Theorem
- java多线程的实现