2019 icpc Shenyang network game -H (large simulation)

Trained, trained, trained, did not tune out the game when
I hit myself
really simple analog ah.
This as a warning, serious code

#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; 
} 
Published 24 original articles · won praise 2 · Views 961

Guess you like

Origin blog.csdn.net/weixin_43521836/article/details/100849356
Recommended