浙大pat甲级 1025

来源:互联网 发布:假面骑士drive知乎 编辑:程序博客网 时间:2024/05/01 11:26

结构体排序问题,可用vector<node> v[105] 分别来保存每个考场考生的信息,分别对每个考场的学生按照成绩来排序得出每个考场的排名,再将学生全部存到总的vector中并排序,得出这次考试全部学生的排名,注意分数相同排名一样。

ac代码:

#include<iostream>#include<cstring>#include<algorithm>#include<cstdlib>#include<cstdio>#include<cmath>#include<stack>#define eps 10000000#include<queue>#include<map>#include<set>using namespace std;struct node{    int id;    string r_id;    int fenshu;    int rank1;    int rank2;};bool cmp(node x,node y){    return x.fenshu<y.fenshu;}bool cmp1(node x,node y){    if(x.fenshu!=y.fenshu)        return x.fenshu<y.fenshu;    else        return x.r_id>y.r_id;}int main(){   int n;   cin>>n;   vector<node> v[105];   vector<node> vv;   int sum=0;   for(int i=0;i<n;i++)   {       int k;       cin>>k;       sum+=k;       for(int j=0;j<k;j++)       {           node tmp;           tmp.id=i+1;           cin>>tmp.r_id>>tmp.fenshu;           v[i+1].push_back(tmp);       }   }   cout<<sum<<endl;   for(int i=1;i<=n;i++)   {       sort(v[i].begin(),v[i].end(),cmp);       int d=v[i].size();       v[i][d-1].rank1=1;       for(int j=d-2;j>=0;j--)       {           if(v[i][j].fenshu==v[i][j+1].fenshu)           {               v[i][j].rank1=v[i][j+1].rank1;           }           else           {               v[i][j].rank1=d-j;           }       }       for(int j=0;j<d;j++)       {           vv.push_back(v[i][j]);       }   }   sort(vv.begin(),vv.end(),cmp1);   int d=vv.size();   //cout<<d<<endl;    vv[d-1].rank2=1;    cout<<vv[d-1].r_id<<" "<<vv[d-1].rank2<<" "<<vv[d-1].id<<" "<<vv[d-1].rank1<<endl;    for(int j=d-2;j>=0;j--)    {        if(vv[j].fenshu==vv[j+1].fenshu)        {               vv[j].rank2=vv[j+1].rank2;        }        else        {               vv[j].rank2=d-j;        }        cout<<vv[j].r_id<<" "<<vv[j].rank2<<" "<<vv[j].id<<" "<<vv[j].rank1<<endl;    }}


0 0