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 (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 312 Accepted Submission(s): 100
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.
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.
4
33A
2
33A
22
33
22
5559T
9993
Yes
No
Yes
Yes
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的更多相关文章
- HDU 4930 Fighting the Landlords(暴力枚举+模拟)
HDU 4930 Fighting the Landlords 题目链接 题意:就是题中那几种牌型.假设先手能一步走完.或者一步让后手无法管上,就赢 思路:先枚举出两个人全部可能的牌型的最大值.然后再 ...
- HDU 4930 Fighting the Landlords(扯淡模拟题)
Fighting the Landlords 大意: 斗地主... . 分别给出两把手牌,肯定都合法.每张牌大小顺序是Y (i.e. colored Joker) > X (i.e. Black ...
- 2014多校第六场 1010 || HDU 4930 Fighting the Landlords (模拟)
题目链接 题意 : 玩斗地主,出一把,只要你这一把对方要不了或者你出这一把之后手里没牌了就算你赢. 思路 : 一开始看了第一段以为要出很多次,实际上只问了第一次你能不能赢或者能不能把牌出尽. #inc ...
- HDU 4930 Fighting the Landlords(模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 解题报告:斗地主,加了一个四张可以带两张不一样的牌,也可以带一对,判断打出一手牌之后,如果对手没 ...
- HDU 4930 Fighting the Landlords --多Trick,较复杂模拟
题意:两个人A和B在打牌,只有题目给出的几种牌能出若A第一次出牌B压不住或者A一次就把牌出完了,那么A赢,输出Yes,否则若A牌没出完而且被B压住了,那么A输,输出No. 解法:知道规则,看清题目,搞 ...
- HDU 6141 - I am your Father! | 2017 Multi-University Training Contest 8
思路来自 FXXL 最小树形图模板用kuangbin的 /* HDU 6141 - I am your Father! [ 最小树形图 ] | 2017 Multi-University Traini ...
- 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到当前点被摘掉的桃子的 ...
- hdu 6319 Problem A. Ascending Rating (2018 Multi-University Training Contest 3 A)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=6319 思路: 单调队列倒着维护,队列里面剩下的值的数量就是这一段区间的count值,如样例第一个区间:3 ...
- 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 ...
随机推荐
- Android开发:shape和selector和layer-list的(详细说明)
http://blog.csdn.net/brokge/article/details/9713041
- 在[self addsubView:xxx]中,self.name 和 _name的区别
在[self addsubView:xxx]中,self.name 和 _name的区别self.name 会调用重写的getter方法,而_name添加的只是_name 这个成员变量
- 使用oracle来计算方差及标准差
/* Formatted on 5/24/2012 4:15:58 PM (QP5 v5.149.1003.31008) */ SELECT deptno, ename, ...
- Unity轻量级依赖注入容器
一.前言 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.在Nuget里安装unity
- JavaScript数组知识网络
JavaScript数据类型 基本数据类型 Boolean Null Number String Symbol Undefined 对象数据类型Object Build-in object Array ...
- jetty 8.1.8 PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required
应该是jdk和jre配置问题,建议看看这个博客:http://blog.csdn.net/nba_2011/article/details/7219750里边查看配置方法很清楚
- Hibernate中HQL的日期差值计算,可计算相差多少秒
最近有个业务需求就是计算订单创建时间离现在超过 4 小时的订单都查找出来! 那么就需要用到日期函数了. 网上找了一下总共的日期函数有一下几个: CURRENT_DATE() 返回数据库当前日期 时间函 ...
- php的一些小笔记--字符串
字符串: 转换ASCII函数: ord($tring) 返回ASCII,chr($ASCII)返回相应的字符 把字符串切割成数据的函数: chunk_split($string,$len) chunk ...
- ajax创建对象
<script> function createAjax(){ var request=false; //window对象中有X ...
- ORA-14400: inserted partition key does not map to any partition
ORA-14400: inserted partition key does not map to any partition 数据库表已经分区,如果插入数据时出现错误提示: ORA-14400: 插 ...