1025. PAT Ranking (25)

距离PAT考试还有15天最重要的就是做透每一题

 

 (1)思路就是保存到一个结构体中然后排序

但是敲得速度还是有点慢

 

#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;

struct record {
  char id[20];
  int fin_rk;
  int lo_nu;
  int lo_rk;
  int sc;
  record(){
    memset(id,'\0',sizeof(id));
    sc=fin_rk=lo_nu=lo_rk=0;
  }
};

bool cmp(record r1,record r2) {
  if(r1.sc == r2.sc) {
    if(strcmp(r1.id,r2.id) < 0) {
      return true;
    } 
  } else if(r1.sc > r2.sc) return true;
  return false;
}

int main() {
  int n;
  scanf("%d",&n);
  vector<vector<record>> vr;
  for(int i=0;i<n;i++) {
    int k;
    scanf("%d",&k);
    vector<record> v;
    for(int j=0;j<k;j++) {
      record re;
      scanf("%s %d",&(re.id[0]),&(re.sc));
      re.lo_nu=i+1;
      v.push_back(re);
    }
    vr.push_back(v);
  }

  vector<record> res;
  for(int i=0;i<vr.size();i++) {
    sort(vr[i].begin(),vr[i].end(),cmp);
    for(int j=0;j<vr[i].size();j++) {
      if(j == 0) vr[i][j].lo_rk=1;
      if(j != 0) {
    if(vr[i][j].sc==vr[i][j-1].sc) {
      vr[i][j].lo_rk=vr[i][j-1].lo_rk;
    } else {
      vr[i][j].lo_rk=j+1;
    }
      }
    }
    for(int j=0;j<vr[i].size();j++) {
      res.push_back(vr[i][j]);
    }
  }

  sort(res.begin(),res.end(),cmp);
  for(int j=0;j<res.size();j++) {
    if(j == 0) res[j].fin_rk=1;
    if(j != 0) {
      if(res[j].sc == res[j-1].sc) {
    res[j].fin_rk=res[j-1].fin_rk;
      } else {
    res[j].fin_rk=j+1;
      }
    }
  }
  printf("%d\n",res.size());
  for(int j=0;j<res.size();j++) {
    printf("%s %d %d %d\n",res[j].id,res[j].fin_rk,res[j].lo_nu,res[j].lo_rk);
  }
}

 

 

 

 

posted @ 2018-03-03 20:56  lan126  阅读(100)  评论(0编辑  收藏  举报