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 ...
随机推荐
- 黑马程序猿 IO流 ByteArrayInputStream与ByteArrayOutputStream
---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- package cn.itcast.IO; i ...
- 使用WebRTC实现电脑与手机通过浏览器进行视频通话
最近一直在研究WebRTC,做了一个小项目:www.meet58.com,这个项目利用WebRTC.WebSocket可以让各种设备只通过浏览器进行视频聊天,无论是电脑.手机或者是平板.下面就是手机和 ...
- XTU OJ 1209 Alice and Bob 2014(嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛)
Problem Description The famous "Alice and Bob" are playing a game again. So now comes the ...
- LR如何监控tomcat性能
使用LoadRunner做性能测试,一般的直觉是LR只能完成脚本录制和编写模拟用户的请求行为,但是在某些情况下,要监控一些中间件或web服务器的性能时,就不能通过录制脚本来完成了,那么就需要手工来编写 ...
- linux学习记录 常用指令大全
1.开启关闭服务器(即时生效): service iptasbles start service iptasbles stop 2.在开启了防火墙时,做如下设置,开启相关端口, 修改/etc/sysc ...
- Android编译过程详解(三)
前面两节讲解了自定义Android编译项和创建Product产品配置文件,除了编译和定义产品相关环境变量外,还需要定义Board相关环境变量. 1. build/core/config.mk 109 ...
- jquery模拟checkbox效果,以及background-size在jquery中的使用。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- 【转载】ADO.NET与ORM的比较(3):Linq to SQL实现CRUD
[转载]ADO.NET与ORM的比较(3):Linq to SQL实现CRUD 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate ...
- Python初学
经同学推荐,学习了下Python语言,看Python的介绍,它本身是一个面向对象的解释型脚本语言,我初看到这句话的时候就在想,一个脚本语言还搞成面向对象?有这个必要么?原谅我肤浅了一把. 它还被俗称为 ...
- Lucene学习总结之三:Lucene的索引文件格式(1)
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...