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. Python matplotlib 柱状图

    matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.它的文档相当完备,并且 ...

  2. 关于python的整形(int)自动转长整形(long)的问题

    有时需要访问某个接口,其中传入的整形参数可能比较长就会变成long,这时如果用str()的话‘L’就会被转化到字符串中,导致接口不能识别: 这种情况下应该优先使用json来转译,可以完美保持翻译pyt ...

  3. div中div水平垂直居中

    方法-1 img { vertical-align: middle; } div:before { content: ""; display: inline-block; widt ...

  4. BZOJ 3910: 火车

    3910: 火车 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 358  Solved: 130[Submit][Status][Discuss] D ...

  5. Android启动过程深入解析【转】

    转自:http://www.open-open.com/lib/view/open1403250347934.html 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么 ...

  6. C#生成高清缩略图的方法

    /// <summary> /// 为图片生成缩略图 /// </summary> /// <param name="phyPath">原图片的 ...

  7. Linux Performance Observability Tools

  8. Cryptography I 学习笔记 --- 密钥交换

    1. 使用可信第三方(Trusted third parties)进行密钥交换. a. Alice与TTP之间的密钥是K1,Bob与TTP之间的密钥是K2. b. Alice向TTP发起一个与Bob交 ...

  9. PC网页js调用本地应用程序

    最近要现实一个在PC网页中实现点击按钮调用本地应用程序的功能 其实实现原理也非常简单, 首先注册一个本地注册表文件,指向本地应用程序路径 其次在网页中用js指向这个注册表文件,就可以实现网页调用本地应 ...

  10. Gym 101064 D Black Hills golden jewels 【二分套二分/给定一个序列,从序列中任意取两个数形成一个和,两个数不可相同,要求求出第k小的组合】

    D. Black Hills golden jewels time limit per test 2 seconds memory limit per test 256 megabytes input ...