5062: “五张”扑克牌游戏
时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte
总提交: 95 测试通过:32
总提交: 95 测试通过:32
描述
YuYu最近喜欢上了爸爸小时候爱玩的游戏,这个游戏名为“五张”,游戏规则是这样的:
(1)双方一开始各有5张牌,由石头剪刀布游戏决定先出牌的玩家;
(2)54张牌去掉大小王,其它剩余的牌面大小顺序为3<4<5<6<7<8<9<10<J<Q<K<A<2;
(3)可以出单张、对子(2张相同)、三条(3张相同)、炸弹(4张相同),张数相同时大的可以压小的,比如22可以压33,AAA可以压KKK,4444可以压3333等。而炸弹可以压单张、对子和三条,如3333可以压10、99、222等。
YuYu总是记不住这些规则,每次明明有可以压的牌,总是说没有,现在已知YuYu现在手中的牌,以及爸爸现在出的牌,请你判断YuYu能不能出牌。
输入
输入数据有多组,第一行为数据组数T,接下来有T组数据,每组数据有2行:
第1行第一个数为YuYu手中牌的张数n(1<=n<=5),后面是n张牌的面值,各数据之间用空格隔开。
第2行第一个数为爸爸现在出的牌张数m(1<=m<=4,1为单张、2为对子、3为三条、4为炸弹),后面是其牌面值。
各行的数据之间用空格隔开。
输出
对于每组数据,如果YuYu能出牌则输出Yes,否则输出No。
样例输入
样例输出
题目来源
标签
题目上传者
解法:map+模拟!!
#include<iostream>
#include<stdio.h>
#include<map>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int T;
map<string,int>pq;
pq["3"]=3,pq["4"]=4,pq["5"]=5;
pq["6"]=6,pq["7"]=7,pq["8"]=8,pq["9"]=9,pq["10"]=10;
pq["J"]=11,pq["Q"]=12,pq["K"]=13,pq["A"]=14,pq["2"]=15;
cin>>T;
while(T--)
{
int m,a[16]={0},n;
string str,s;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>str;
a[pq[str]]++;
}
cin>>m>>s;
int f=0,G=0;
for(int i=3;i<16;i++)
if(a[i]==4)
G=1;
if(m==1)
{
for(int i=pq[s];i<16;i++)
{
if(G||i!=pq[s]&&a[i])
{
f=1;
cout<<"Yes\n";
break;
}
}
if(!f)
cout<<"No\n";
}
else if(m==2)
{
for(int i=pq[s];i<16;i++)
{
if(G||i!=pq[s]&&a[i]>=m)
{
f=1;
cout<<"Yes\n";
break;
}
}
if(!f)
cout<<"No\n";
}
else if(m==3)
{
for(int i=pq[s];i<16;i++)
{
if(G||i!=pq[s]&&a[i]==m)
{
f=1;
cout<<"Yes\n";
break;
}
}
if(!f)
cout<<("No\n");
}
else
{
for(int i=pq[s]+1;i<16;i++)
{
if(a[i]==m)
{
f=1;
cout<<"Yes\n";
break;
}
}
if(!f)
cout<<"No\n";
}
}
return 0;
}