AcWing 1502. PAT 排名
原题链接
中等
作者:
整天睡大觉
,
2024-03-05 14:26:53
,
所有人可见
,
阅读 21
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<string, int> PII;
const int N = 110, M = 310;
int n, sum;
struct Student
{
string id;
int grade, location_number, final_rank, local_rank;
bool operator< (const Student& t)const
{
if(grade != t.grade) return grade > t.grade;
else return id < t.id;
}
};
vector<Student> all;
vector<Student> grades[N];
int main()
{
cin >> n;
for (int i = 0; i < n; i ++){
int m;
cin >> m;
sum += m;
for (int j = 1; j <= m; j ++ )
{
string id;
int grade;
cin >> id >> grade;
grades[i].push_back({id, grade, i + 1});
}
auto& g = grades[i];
sort(g.begin(), g.end());
for (int k = 0; k < g.size(); k ++ )
{
if(!k || g[k].grade != g[k - 1].grade)
g[k].local_rank = k + 1;
else
g[k].local_rank = g[k - 1].local_rank;
all.push_back(g[k]);
}
}
auto &a = all;
sort(a.begin(), a.end());
for (int i = 0; i < a.size(); i ++ )
{
if(!i || a[i].grade != a[i - 1].grade)
a[i].final_rank = i + 1;
else
a[i].final_rank = a[i - 1].final_rank;
}
cout << sum << endl;
for (int i = 0; i < a.size(); i ++ )
{
cout << a[i].id << " " << a[i].final_rank << " " << a[i].location_number
<< " " << a[i].local_rank << endl;
}
}