#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
struct pat{
string id;
int final_rank;
int loc_number;
int loc_rank;
int grade;
};
int cmp(pat a,pat b)
{
if(a.grade!=b.grade)
return a.grade>b.grade;
else
{
return a.id<b.id;
}
}
int main()
{
int n,n1;
cin>>n;
n1=n;
vector<vector<pat>>v;
vector<pat> tm;
int i=0;
while(n1--)
{
int k;
cin>>k;
tm.clear();
while(k--)
{
pat tmp;
cin>>tmp.id>>tmp.grade;
tmp.loc_number=i+1;
tm.push_back(tmp);
}
v.push_back(tm);
i++;
}
for(int i=0;i<n;i++)
{
sort(v[i].begin(),v[i].end(),cmp);
}
int nowrank=-1;
int nowgrade=-1;
for(int i=0;i<n;i++)
{
for(int j=0;j<v[i].size();j++)
{
if(v[i][j].grade==nowgrade)
v[i][j].loc_rank=nowrank;
else{
v[i][j].loc_rank=j+1;
nowgrade=v[i][j].grade;
nowrank=j+1;
}
}
}
vector<pat>result;
for(int i=0;i<n;i++)
{
for(int j=0;j<v[i].size();j++)
{
result.push_back(v[i][j]);
}
}
sort(result.begin(),result.end(),cmp);
nowrank=-1;
nowgrade=-1;
for(int j=0;j<result.size();j++)
{
if(result[j].grade==nowgrade)
result[j].final_rank=nowrank;
else{
result[j].final_rank=j+1;
nowgrade=result[j].grade;
nowrank=j+1;
}
}
cout<<result.size()<<endl;
for(int i=0;i<result.size();i++)
{
cout<<result[i].id<<" "<<result[i].final_rank<<" "<<result[i].loc_number<<" "<<result[i].loc_rank<<endl;
}
}
1025. PAT Ranking (25)
最新推荐文章于 2022-06-21 16:06:59 发布