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. 使用iview如何使左上的添加按钮和右上的搜索框和边框对齐

    使用iview如何使左上的添加按钮和右上的搜索框和边框对齐呢? 效果如下: 使用iview自带的Grid 栅格进行布局,但是由于按钮和搜索框的大小不正好是一个栅格的宽度,所以不是很好跳转,且栅格也不支 ...

  2. Using MEF to Set Up Dependency Injection

    The Managed Extensibility Framework (MEF) is a built-in set of elements that allows you to “export” ...

  3. java 去html标签,去除字符串中的空格,回车,换行符,制表符

    public static String getonerow(String allLine,String myfind)     {                           Pattern ...

  4. duilib入门简明教程 -- XML配置界面(6) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3343699.html     前面那些教程都是为了让小伙伴们从win32.MFC过渡到duilib,让大家觉得duilib ...

  5. linux命令行下使用vboxmanage安装linux系统

    环境:Ubuntu 15.10 64bit,virtualbox 5.0.16 准备:下载安装好virtualbox,virtualbox-extensions,准备好iso系统文件,如archlin ...

  6. java 修改字体大小

    在Windows->Preferences->General->Appearance->Colors and Fonts->Java->Java Editor Te ...

  7. ASP.NET MVC 利用Razor引擎生成静态页

    实现原理及步骤: 1.通过ViewEngines.Engines.FindView查找到对应的视图,如果是部分视图,则用:ViewEngines.Engines.FindPartialView: 2. ...

  8. HDU1086 You can Solve a Geometry Problem too(计算几何)

    You can Solve a Geometry Problem too                                         Time Limit: 2000/1000 M ...

  9. 10.1综合强化刷题 Day2 morning

    一道图论神题(god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有 ...

  10. Jenkins集成java非maven/ant项目的打包思路

    打包的思路如下: 1.使用javac命令对代码进行编译,比如递归编译整个项目的java代码.(注意:需要一一对应引用的jar包) 2.输出并整理war包的文件夹结构目录,参考:http://www.c ...