如果你WA了第七个点
2025-07-27 16:31:40
发布于:浙江
2阅读
0回复
0点赞
主要是题面描述有问题,也就是说可能有两张一样的牌(比如两张黑桃A),用map的同学需要处理一下
纯模拟
#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;//牌堆
int t;
string pai[101];
char dui[100]={0,'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
string shuchu[100]={"","HIGH CARD","ONE PAIR","TWO PAIR","THREE OF KIND","STRAIGHT","FLUSH","FULL HOUSE","FOUR OF A KIND","STRAIGHT FLUSH","ROYAL FLUSH"};
int arr[100];
int tonumber(string x,int n){
if(n==1){
char a=x[0];
if(a=='A')a='1';
if(a=='T')a='9'+1;
if(a=='J')a='9'+2;
if(a=='Q')a='9'+3;
if(a=='K')a='9'+4;
int b=a-'0';
return b;
}else{
char a=x[1];
if(a=='S')return 1;
if(a=='H')return 10;
if(a=='C')return 100;
if(a=='D')return 1000;
}return 0;
}
bool shunzi(){
for(int i=2;i<=5;i++){
if(arr[i]-arr[i-1]!=1){
return 0;
}
}return 1;
}
bool four(){
int tong[14]={};
for(int i=1;i<=5;i++){
tong[arr[i]]++;
}for(int i=1;i<=13;i++){
if(tong[i]>=4){
return 1;
}
}return 0;
}
bool three(){
int tong[14]={};
for(int i=1;i<=5;i++){
tong[arr[i]]++;
}for(int i=1;i<=13;i++){
if(tong[i]==3){
return 1;
}
}return 0;
}
int two(){
int tong[14]={};
int sum=0;
for(int i=1;i<=5;i++){
tong[arr[i]]++;
}for(int i=1;i<=13;i++){
if(tong[i]==2){
sum++;
}
}return sum;
}
int main(){
cin>>t;
while(t--){
int sum=1;
for(int i=1;i<=7;i++){
cin>>pai[i];
}for(int a=1;a<=7;a++){
for(int b=a+1;b<=7;b++){
for(int c=b+1;c<=7;c++){
for(int d=c+1;d<=7;d++){
for(int e=d+1;e<=7;e++){
int yanse=0;bool tonghua=0,sz=0,san=0,zha=0;int er=0;
mp[pai[a]]++;mp[pai[b]]++;mp[pai[c]]++;mp[pai[d]]++;mp[pai[e]]++;
int fl=0;
for(auto it=mp.begin();it!=mp.end();it++){
for(int ti=1;ti<=it->second;ti++){
int p=tonumber(it->first,1);
arr[++fl]=p;
yanse+=tonumber(it->first,2);
}
}sort(arr+1,arr+6);
if(yanse==5||yanse==50||yanse==500||yanse==5000)tonghua=1;
if(shunzi())sz=1;
if(four())zha=1;
if(three())san=1;
er=two();
if(arr[1]==1&&arr[2]==10&&arr[3]==11&&arr[4]==12&&arr[5]==13&&tonghua)sum=max(sum,10);
else if(sz&&tonghua)sum=max(sum,9);
else if(zha)sum=max(sum,8);
else if(san&&er)sum=max(sum,7);
else if(tonghua)sum=max(sum,6);
else if(sz)sum=max(sum,5);
else if(san)sum=max(sum,4);
else if(er==2)sum=max(sum,3);
else if(er)sum=max(sum,2);
mp.clear();
}
}
}
}
}
cout<<shuchu[sum]<<endl;
}
}
这里空空如也
有帮助,赞一个