其实按着他的规则慢慢写就行了,也没有什么坑点,,但是话是这么说,比赛的时候人的情绪会很紧张,这样的话就很容易出错,,很可能会写错一两个小地方,但是代码又比较长,还不好调。。所以写这种题还是很考验代码功底的,,慢慢练吧。
8说了直接上代码。补题也是wa了好几发才过,吐血
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
const int N = 1e5+10;
int n;
map<char,int> mp;
struct node
{
string name,s;
int value,com1,com2,com3;
bool operator < (const node &x)const
{
if(value!=x.value)
return value>x.value;
if(com1!=x.com1)
return com1>x.com1;
if(com2!=x.com2)
return com2>x.com2;
if(com3!=x.com3)
return com3>x.com3;
return name<x.name;
}
}a[N];
void swap()
{
for(int k=0;k<n;k++)
{
string s=a[k].s;
int book[15],num[15];
memset(book,0,sizeof book);
memset(num,0x3f,sizeof num);
int kk=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='0') continue;
int xx=mp[s[i]];
book[xx]++;
num[kk++]=xx;
}
sort(num,num+kk);
int value,flag4=0,x4,flag3=0,x3,flag2=0,x2,sum=0,com2,flag1=0,x;
for(int i=1;i<5;i++)
if(num[i]-num[i-1]==1)
sum++;
if(book[1]&&book[10]&&book[11]&&book[12]&&book[13])
{
a[k].value=8;a[k].com1=0;a[k].com2=0;a[k].com3=0;continue;
}
if(sum==4)
{
a[k].value=7;a[k].com1=num[4];a[k].com2=0;a[k].com3=0;continue;
}
sum=0;
for(int i=1;i<=13;i++)
{
if(book[i]==4)
flag4++,x4=i;
if(book[i]==3)
flag3++,x3=i;
if(book[i]==2)
{
if(flag2) flag2++,com2=x2,x2=i;
else
flag2++,x2=i;
}
if(book[i]==1)
flag1++,sum+=i,x=i;
}
if(flag4)
{
a[k].value=6;a[k].com1=x4;a[k].com2=x;a[k].com3=0;
}
else if(flag3&&flag2)
{
a[k].value=5;a[k].com1=x3;a[k].com2=x2;a[k].com3=0;
}
else if(flag3)
{
a[k].value=4;a[k].com1=x3;a[k].com2=sum; a[k].com3=0;
}
else if(flag2==2)
{
a[k].value=3;a[k].com1=x2;a[k].com2=com2;a[k].com3=sum;
}
else if(flag2)
{
a[k].value=2;a[k].com1=x2;a[k].com2=sum;a[k].com3=0;
}
else
{
a[k].value=1;a[k].com1=sum;a[k].com2=0;a[k].com3=0;
}
}
}
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
for(int i=2;i<=9;i++)
{
char x=i+'0';
mp[x]=i;
}
mp['1']=10;mp['A']=1,mp['J']=11,mp['Q']=12,mp['K']=13;
while(cin>>n)
{
for(int i=0;i<n;i++)
cin>>a[i].name>>a[i].s;
swap();
sort(a,a+n);
for(int i=0;i<n;i++)
cout<<a[i].name<<endl;
}
return 0;
}