嘤嘤嘤 比赛时候都没调出来
我打我自己
真的是单纯模拟啊。
以此为戒,认真码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string name[100005];
struct P{
int id[10];
string name;
int remain;
} p[100005];
string card;
int cnt[30],book[30],n;
bool cmp(P a,P b){
for(int k=8;k>=1;k--){
if(a.id[k]||b.id[k]){
if(a.id[k]!=b.id[k]) return a.id[k]>b.id[k];
else{
if(a.remain!=b.remain) return a.remain>b.remain;
else return a.name<b.name;
}
}
}
return 0;
}
int cal(){
int ans=0;
for(int k=13;k>=1;k--)
if(!book[k] && cnt[k])
ans += k;
return ans;
}
int check5(int x){
for(int k=13;k>=5;k--)
if(cnt[k]&&cnt[k-1]&&cnt[k-2]&&cnt[k-3]&&cnt[k-4]){
p[x].id[7]=k;
return 1;
}
return 0;
}
int check4(int x){
for(int k=13;k>=1;k--)
if(cnt[k]==4){
book[k]=1;
p[x].id[6]=k;
p[x].remain=cal();
return 1;
}
return 0;
}
int check3_2(int x){
int b=0;
int f=0;
for(int k=13;k>=1;k--){
if(cnt[k]==3) f=k;
if(cnt[k]==2) b=k;
if(f && b){
p[x].remain=b;
p[x].id[5]=f;
}
}
return 0;
}
int check3(int x){
for(int k=13;k>=1;k--)
if(cnt[k]==3){
book[k]=1;
p[x].id[4]=k;
p[x].remain=cal();
return 1;
}
return 0;
}
int check2_p(int x){
int f1=0,f2=0;
bool flag=0;
for(int k=13;k>=1;k--){
flag=0;
if(!f1&&cnt[k]==2){
f1=k;
book[k]=1;
flag=1;
//continue;
}
if(!f2&&f1&&cnt[k]==2&&!flag){
f2=k;
book[k]=1;
}
if(f1&&f2) break;
}
if(f1&&f2){
p[x].id[3]=f1;
p[x].remain=f2*2000;
p[x].remain+=cal();
return 1;
}
return 0;
}
int check2(int x){
for(int k=13;k>=1;k--)
if(cnt[k]==2){
book[k]=1;
p[x].id[2]=k;
p[x].remain=cal();
return k;
}
return 0;
}
int main(){
while(cin >> n){
for(int i=1;i<=n;i++){
for(int j=1;j<=8;j++){
p[i].id[j]=0;
p[i].remain=0;
}
}
for(int i=1;i<=n;i++){
for(int k=0;k<=14;k++) {
cnt[k]=0;
book[k]=0;
}
cin >> p[i].name;
cin >> card;
int l=card.length();
for(int j=0;j<l;j++){
if(card[j]=='A') cnt[1]++;
else if(card[j]=='J') cnt[11]++;
else if(card[j]=='Q') cnt[12]++;
else if(card[j]=='K') cnt[13]++;
else if(card[j]=='1') cnt[10]++;
else cnt[card[j]-'0']++;
}
if(cnt[10]&& cnt[11]&&cnt[12]&&cnt[13]&&cnt[1]) p[i].id[8]=1;
else if(check5(i));
else if(check4(i));
else if(check3_2(i));
else if(check3(i));
else if(check2_p(i));
else if(check2(i));
else p[i].id[1]=cal();
}
sort(p+1,p+1+n,cmp);
for(int i=1;i<=n;i++) cout<< p[i].name<<endl;
}
return 0;
}