AcWing 1502. PAT 排名
原题链接
中等
作者:
RainSure
,
2022-02-25 11:07:02
,
所有人可见
,
阅读 142
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 110;
typedef struct node
{
string id;
int grade;
int f_rank, l_number, l_rank;
bool operator < (const struct node &w) const{
if(grade != w.grade) return grade > w.grade;
else return id < w.id;
}
}Node;
vector<Node> a[maxn];
vector<Node> all;
int n;
int main()
{
cin >> n;
for(int i = 1; i <= n; i ++){
int k; cin >> k;
while(k --)
{
string id;
int grade;
cin >> id >> grade;
Node temp;
temp.id = id, temp.grade = grade, temp.l_number = i;
a[i].push_back(temp);
}
}
for(int i = 1; i <= n; i ++){
auto &g = a[i];
sort(g.begin(), g.end());
for(int j = 0; j < g.size(); j ++){
if(!j || g[j].grade != g[j - 1].grade) g[j].l_rank = j + 1;
else g[j].l_rank = g[j - 1].l_rank;
all.push_back(g[j]);
}
}
sort(all.begin(), all.end());
for(int i = 0; i < all.size(); i ++){
if(!i || all[i].grade != all[i - 1].grade) all[i].f_rank = i + 1;
else all[i].f_rank = all[i - 1].f_rank;
}
cout << all.size() << endl;
for(int i = 0; i < all.size(); i ++){
cout << all[i].id << " " << all[i].f_rank << " " << all[i].l_number <<" " << all[i].l_rank << endl;
}
return 0;
}