题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930

Fighting the Landlords

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)

Total Submission(s): 312    Accepted Submission(s): 100

Problem Description
Fighting the Landlords is a card game which has been a heat for years in China. The game goes with the 54 poker cards for 3 players, where the “Landlord” has 20 cards and the other two (the “Farmers”) have 17. The Landlord wins if he/she has no cards left,
and the farmer team wins if either of the Farmer have no cards left. The game uses the concept of hands, and some fundamental rules are used to compare the cards. For convenience, here we only consider the following categories of cards:



1.Solo: a single card. The priority is: 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. It’s the basic rank of cards.



2.Pair : two matching cards of equal rank (e.g. 3-3, 4-4, 2-2 etc.). Note that the two Jokers cannot form a Pair (it’s another category of cards). The comparison is based on the rank of Solo, where 2-2 is the highest, A-A comes second, and 3-3 is the lowest.



3.Trio: three cards of the same rank (e.g. 3-3-3, J-J-J etc.). The priority is similar to the two categories above: 2-2-2 > A-A-A > K-K-K > . . . > 3-3-3.



4.Trio-Solo: three cards of the same rank with a Solo as the kicker. Note that the Solo and the Trio should be different rank of cards (e.g. 3-3-3-A, 4-4-4-X etc.). Here, the Kicker’s rank is irrelevant to the comparison, and the Trio’s rank
determines the priority. For example, 4-4-4-3 > 3-3-3-2.



5.Trio-Pair : three cards of the same rank with a Pair as the kicker (e.g. 3-3- 3-2-2, J-J-J-Q-Q etc.). The comparison is as the same as Trio-Solo, where the Trio is the only factor to be considered. For example,4-4-4-5-5 > 3-3-3-2-2. Note again, that two jokers
cannot form a Pair.



6.Four-Dual: four cards of the same rank with two cards as the kicker. Here, it’s allowed for the two kickers to share the same rank. The four same cards dominates the comparison: 5-5-5-5-3-4 > 4-4-4-4-2-2.



In the categories above, a player can only beat the prior hand using of the same category but not the others. For example, only a prior Solo can beat a Solo while a Pair cannot. But there’re exceptions:



7.Nuke: X-Y (JOKER-joker). It can beat everything in the game.



8.Bomb: 4 cards of the same rank. It can beat any other category except Nuke or another Bomb with a higher rank. The rank of Bombs follows the rank of individual cards: 2-2-2-2 is the highest and 3-3-3-3 is the lowest.



Given the cards of both yours and the next player’s, please judge whether you have a way to play a hand of cards that the next player cannot beat you in this round.If you no longer have cards after playing, we consider that he cannot beat you
either. You may see the sample for more details.
 
Input
The input contains several test cases. The number of test cases T (T<=20) occurs in the first line of input.



Each test case consists of two lines. Both of them contain a string indicating your cards and the next player’s, respectively. The length of each string doesn’t exceed 17, and each single card will occur at most 4 times totally on two players’ hands
except that the two Jokers each occurs only once.
 
Output
For each test case, output Yes if you can reach your goal, otherwise output No.
 
Sample Input
4
33A
2
33A
22
33
22
5559T
9993
 
Sample Output
Yes
No
Yes
Yes
 
Source
 
Recommend
hujie   |   We have carefully selected several similar problems for you:  4929 4928 4926 4924 4923 
 

Statistic | Submit | Discuss | Note

这题事实上就是斗地主,一道比較麻烦的模拟题,但假设分析好了事实上也不难。

我分情况进行讨论。

首先推断牌能否出完,然后推断炸弹,接着是1根,2根,3根,3带1,3带对,4带2,。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<string>
#include<vector>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
#define CLR(A) memset(A,0,sizeof(A))
const int MAX=20;
char stra[MAX],strb[MAX];
int va[MAX],vb[MAX];
int na,nb;
void change(char s[],int v[]){
for(int i=0;i<strlen(s);i++){
if(s[i]>='3'&&s[i]<='9') v[i]=s[i]-'0';
if(s[i]=='T') v[i]=10;
if(s[i]=='J') v[i]=11;
if(s[i]=='Q') v[i]=12;
if(s[i]=='K') v[i]=13;
if(s[i]=='A') v[i]=14;
if(s[i]=='2') v[i]=15;
if(s[i]=='X') v[i]=16;
if(s[i]=='Y') v[i]=17;
}
}
int Bomb(int v[],int len){
int cnt=1,i;
for(i=len-1;i>=0;i--){
if(v[i]<16) break;
}
if(i<3) return 0;
i--;
for(;i>=0;i--){
if(v[i]==v[i+1])
cnt++;
else
cnt=1;
if(cnt==4) return v[i];
}
return 0;
} int Nuke(int v[],int len){
if(len<2) return 0;
if(v[len-1]==17&&v[len-2]==16) return 1;
return 0;
} int Pair(int v[],int len){
if(len<2) return 0;
for(int i=len-2;i>=0;i--){
if(v[i]==v[i+1]) return v[i];
}
return 0;
} int Trio(int v[],int len){
if(len<3) return 0;
int cnt=1;
for(int i=len-2;i>=0;i--){
if(v[i]==v[i+1]) cnt++;
else cnt=1;
if(cnt==3) return v[i];
}
return 0;
} int Trio_Solo(int v[],int len){
if(len<4) return 0;
int x=Trio(v,len);
if(x && x!=v[0] && x!=v[len-1])
return Trio(v,len);
} int Trio_Pair(int v[],int len){
if(len<5) return 0;
int x=Trio(v,len);
int pos;
if(x!=0){
pos=lower_bound(v,v+len,x)-v;
int t1=Pair(v,pos);
if(t1!=0) return x;
pos++;//防止溢出
for(pos;pos<len;pos++){
if(v[pos]!=v[pos-1]) break;
}
int t2=Pair(v+pos,len-pos);
if(t2!=0) return x;
}
return 0;
} int Four_Dual(int v[],int len){
if(len<6) return 0;
return Bomb(v,len);
} bool Drop_All(int v[],int len){
if(len>7) return false;
if(len==6&&Four_Dual(v,len)!=0) return 1;
if(len==5&&Trio_Pair(v,len)!=0) return 1;
if(len==4&&(Trio_Solo(v,len)!=0||Bomb(v,len)!=0)) return 1;
if(len==3&&Trio(v,len)!=0) return 1;
if(len==2&&Pair(v,len)!=0&&Nuke(v,len)) return 1;
if(len==1) return 1;
return 0;
} bool check(int v1[],int len1,int v2[],int len2){
int x,y;
if(Drop_All(v1,len1)) return true;
if(Nuke(v1,len1)!=0) return true;
if(Nuke(v2,len2)!=0) return false;
x=Bomb(v1,len1);y=Bomb(v2,len2);
if(x && y==0) return true;
if(x==0 && y) return false;
if(x && x>=y) return true;
if(y>x) return false;
if(v1[len1-1]>=v2[len2-1]) return true;
x=Pair(v1,len1);y=Pair(v2,len2);
if(x && x>=y) return true;
x=Trio(v1,len1);y=Trio(v2,len2);
if(x && x>=y) return true;
x=Trio_Solo(v1,len1);y=Trio_Solo(v2,len2);
if(x && x>=y) return true;
x=Trio_Pair(v1,len1);y=Trio_Pair(v2,len2);
if(x && x>=y) return true;
x=Four_Dual(v1,len1);y=Four_Dual(v2,len2);
if(x && x>=y) return true;
return false;
} int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s%s",stra,strb);
na=strlen(stra);nb=strlen(strb);
change(stra,va);change(strb,vb);
sort(va,va+na);sort(vb,vb+nb);
if(check(va,na,vb,nb)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}

hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6的更多相关文章

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

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

  2. HDU 4930 Fighting the Landlords(扯淡模拟题)

    Fighting the Landlords 大意: 斗地主... . 分别给出两把手牌,肯定都合法.每张牌大小顺序是Y (i.e. colored Joker) > X (i.e. Black ...

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

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

  4. HDU 4930 Fighting the Landlords(模拟)

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

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

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

  6. HDU 6141 - I am your Father! | 2017 Multi-University Training Contest 8

    思路来自 FXXL 最小树形图模板用kuangbin的 /* HDU 6141 - I am your Father! [ 最小树形图 ] | 2017 Multi-University Traini ...

  7. hdu 6406 Taotao Picks Apples (2018 Multi-University Training Contest 8 1010)(二分,前缀和)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6406 思路: 暴力,预处理三个前缀和:[1,n]桃子会被摘掉,1到当前点的最大值,1到当前点被摘掉的桃子的 ...

  8. hdu 6319 Problem A. Ascending Rating (2018 Multi-University Training Contest 3 A)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=6319 思路: 单调队列倒着维护,队列里面剩下的值的数量就是这一段区间的count值,如样例第一个区间:3 ...

  9. HDU 5775 Bubble Sort(线段树)(2016 Multi-University Training Contest 4 1012)

    原址地址:http://ibupu.link/?id=31 Problem Description P is a permutation of the integers from 1 to N(ind ...

随机推荐

  1. Eclipse上改动Jython代码的Comment颜色

    1.问题起因 依据上一篇文章<MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)>搭配好Eclipse上面的MonkeyRu ...

  2. OLEDB简介

    OLE DB(OLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口.OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQ ...

  3. ToString()和Convert.ToString()的区别

    ToString()和Convert.ToString()的区别 一般情况下,这两种方法都可以通用,但是当返回的数据类型中有可能出现null值时如果调用ToString方法了,就会返回NullRefe ...

  4. 注册界面的优化之ActionBar组件的应用之(一)ActionBar组件的布局实现

    开发步骤:  在res下menu文件夹中创建一个actionbar_menu_register.xml菜单资源文件  在资源文件中添加标签设置一个或多个ActionBar功能选项 //action ...

  5. [转]CENTOS6 VNCSERVER安装

    标签:vncservercentos6.0 ssh隧道 vncviewer centos 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...

  6. MJExtension(JSON到数据模型的自动转换)

    整理自:http://www.jianshu.com/p/93c242452b9b. 1.MJExtension的功能 字典-->模型 模型-->字典 字典数组-->模型数组 模型数 ...

  7. ios开发中的基本设计模式

    (一)代理模式应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现.优势:解耦合敏捷原则:开放-封闭原则实例:tableview的 数据源delegate,通过和protoc ...

  8. Struts 2读书笔记-----Action访问Servlet API

    Action访问Servlet API Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试. 对于Web应用的控制器而言,不访问ServletAPI是几 ...

  9. php函数、类和对象以及类的封装、继承、类的静态方法、静态属性

    1.函数     php内置函数可以直接使用,如果没有安装php扩展即可     自定义函数 //函数function 函数名 function dump($var = null){ //支出默认参数 ...

  10. 关于LayoutParams

    每一个布局均有一个叫LayoutParams的内部类,如: LinearLayout.LayoutParams  RelativeLayout.LayoutParams  AbsoluteLayout ...