题目大意
解题思路
模拟,就看写的细不细。
解题代码
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
char Poker[13]={'2','3','4','5','6','7','8','9','O','J','Q','K','A'};
char Flower[4]={'D','C','H','S'};
int Flower_I[30],Poker_I[30],Poker_J[30];
struct Pok{
int num,flower;
}a[5],b[5];
bool cmp(Pok a,Pok b)
{
if (a.num==b.num)
{
return a.flower>b.flower;
}
else return a.num>b.num;
}
int Query(string P)
{
int num=0,flow=0,cnt=0;
for (int i=0;i<P.length();i++)
{
while (P[i]!=Flower[1]&&P[i]!=Flower[2]&&P[i]!=Flower[0]&&P[i]!=Flower[3]) i++;
cnt++;
a[cnt].flower=Flower_I[P[i]-'A'];
i+=2;
char c=P[i];
if (P[i]=='1'&&P[i+1]=='0') c='O',i++;
if (c<='9'&&c>='0') num=Poker_J[c-'0'];
if (c<='Z'&&c>='A') num=Poker_I[c-'A'];
a[cnt].num=num;
if (cnt==3) break;
}
sort(a+1,a+4,cmp);
if (a[1].num==a[2].num&&a[1].num==a[3].num)
{
return 6;
}
if (a[1].flower==a[2].flower&&a[2].flower==a[3].flower)
{
if (a[1].num-1==a[2].num&&a[2].num-1==a[3].num)
{
return 5;
}
else
if (a[1].num==12&&a[2].num==1&&a[3].num==0) return 5;
else return 4;
}
if (a[1].num-1==a[2].num&&a[2].num-1==a[3].num) return 3;
else if (a[1].num==12&&a[2].num==1&&a[3].num==0) return 3;
if (a[1].num==a[2].num||a[1].num==a[3].num||a[2].num==a[3].num) return 2;
if (a[1].num==3&&a[2].num==1&&a[3].num==0)
{
if (a[1].flower!=a[2].flower||a[2].flower!=a[3].flower||a[1].flower!=a[3].flower) return 0;
}
return 1;
}
bool PD(int X,int Y)//X,a huang, Y,b zhang; 1 huang 0 zhang;
{
if (X==0||Y==0)
{
if (X==0&&Y==6) return 1;
if (X==6&&Y==0) return 0;
if (X==0) X=1;
if (Y==0) Y=1;
}
if (X!=0&&Y!=0)
{
if (X>Y) return 1;
if (Y>X) return 0;
if (X==Y)
{
if (X==5||X==3)
{
if ((a[1].num==12&&a[2].num==1)&&!(b[1].num==12&&b[2].num==1)) return 0;
if (!(a[1].num==12&&a[2].num==1)&&(b[1].num==12&&b[2].num==1)) return 1;
if ((a[1].num==12&&a[2].num==1)&&(b[1].num==12&&b[2].num==1)) return a[2].flower>b[2].flower;
}
if (X==2)
{
int u,v;int o,p;
for (int i=1;i<=2;i++)
{
if (a[i].num==a[i+1].num) u=a[i].num;
if (b[i].num==b[i+1].num) v=b[i].num;
}
for (int i=1;i<=2;i++)
{
if (a[i].num!=u) o=a[i].num;
if (b[i].num!=v) p=b[i].num;
}
if (u==v)
{
if (o==p)
{
if (a[2].flower==3) return 1;
if (b[2].flower==3) return 0;
}
else return o>p;
}
else return u>v;
}
for (int i=1;i<=3;i++)
{
if (a[i].num==b[i].num) 1;
else return a[i].num>b[i].num;
}
for (int i=1;i<=3;i++)
{
if (a[i].flower>b[i].flower)return 1;
if (a[i].flower<b[i].flower)return 0;
}
}
}
}
int main()
{
int T;
for (int i=0;i<=3;i++) Flower_I[Flower[i]-'A']=i;
for (int i=8;i<=12;i++) Poker_I[Poker[i]-'A']=i;
for (int i=0;i<=7;i++) Poker_J[Poker[i]-'0']=i;
scanf("%d",&T);
while (T--)
{
string S,zhang,huang;
zhang.clear();huang.clear();
cin>>S;int M=0;
for (int i=0;i<S.length();i++)
{
if (S[i]==':') {M=i;continue;}
if (!M) zhang+=S[i];
else huang+=S[i];
}
int Y=Query(zhang);
for (int i=1;i<=3;i++) b[i].num=a[i].num,b[i].flower=a[i].flower;
int X=Query(huang);
if (PD(X,Y)) puts("huang_sir");
else puts("zhang_sir");
}
return 0;
}
gayman竟然大括号换行![]()