题目链接:点击打开链接
题意:斗地主,给出你和对方的牌,看你能不能一次出完或者出一首对方压不了的牌。
模拟题,记录1,2,3,4张最大的是什么,一共有多少种。注意判断顺序应是一次出完--》对方有炸且比我大--》对方压不住我的牌
比赛是第二层没写好,wa了n次。
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int input(char t){
int a;
if(t=='T')
a=10;
else if(t=='Y')
a=200;
else if(t=='X')
a=100;
else if(t=='2')
a=20;
else if(t=='A')
a=15;
else if(t=='K')
a=13;
else if(t=='Q')
a=12;
else if(t=='J')
a=11;
else a=t-'0';
return a;
}
int a[30];
int b[30];
int amax[5],bmax[5];
int anum[5],bnum[5];
int num1,num2;
void init(){
for(int i=0;i<=4;i++){
amax[i]=bmax[i]=anum[i]=bnum[i]=0;
}
}
bool solve(){
if(anum[4]==1&&!anum[3]&&((anum[2]==1&&!anum[1])||(!anum[2]&&anum[1]==2))){
return 1;
}
if(!anum[4]&&anum[3]==1&&(anum[2]+anum[1])==1){
return 1;
}
if(anum[4]==1&&!anum[3]&&!anum[1]&&!anum[2])
return 1;
if(!anum[4]&&anum[3]==1&&!anum[1]&&!anum[2])
return 1;
if(!anum[4]&&!anum[3]&&!anum[1]&&anum[2]==1)
return 1;
if(!anum[4]&&!anum[3]&&!anum[2]&&anum[1]==1)
return 1;
if(a[num1-1]==200&&a[num1-2]==100){
return 1;
}
if(b[num2-1]==200&&b[num2-2]==100){
return 0;
}
if(anum[4]&&amax[4]>=bmax[4])
return 1;
if(bnum[4])
return 0;
if(amax[1]&&amax[1]>=bmax[1]){
return 1;
}
if(amax[2]&&amax[2]>=bmax[2])
return 1;
if(amax[3]&&amax[3]>=bmax[3]){
return 1;
}
if(anum[3]&&anum[1]&&!(bnum[4]||bnum[3]>=2||bnum[2]||bnum[1])){
return 1;
}
if(anum[3]&&anum[2]&&!(bnum[4]||bnum[3]>=2||bnum[2])){
return 1;
}
return 0;
}
int main(){
int T;
cin>>T;
while(T--){
char t[30];
cin>>t;
for(int i=0;i<strlen(t);i++){
a[i]=input(t[i]);
}
num1=strlen(t);
cin>>t;
for(int i=0;i<strlen(t);i++){
b[i]=input(t[i]);
}
num2=strlen(t);
init();
sort(a,a+num1);
sort(b,b+num2);
int k=1;
int cur=a[0];
for(int i=1;i<num1;i++){
amax[k]=cur;
if(a[i]==cur){
k++;
}
else{
anum[k]++;
k=1;
cur=a[i];
}
}
amax[k]=cur;
anum[k]++;
k=1;cur=b[0];
for(int i=1;i<num2;i++){
bmax[k]=cur;
if(b[i]==cur){
k++;
}
else{
bnum[k]++;
k=1;
cur=b[i];
}
}
bnum[k]++;
bmax[k]=cur;
if(solve()){
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
}
return 0;
}
本文介绍了一种斗地主牌局模拟算法,通过分析玩家手牌来判断是否能一次性出完牌或出一手对手无法压制的牌。算法考虑了不同牌型组合及其优先级,并实现了具体的代码实现。
&spm=1001.2101.3001.5002&articleId=38434365&d=1&t=3&u=b8ec844330454d7492d585798ae18ce6)
833

被折叠的 条评论
为什么被折叠?



