#include
#include
#include
using namespace std;
int N, K, score;
string id;
struct stup // 因为set不能直接对指针对象排序,所以套了个壳
{
struct student
{
string id;
int score, location_number, local_rank;
student(string id, int score, int loc) :id(id), score(score), location_number(loc) {};
};
student* stu;
bool operator<(const stup &b) const {
if (stu->score > b.stu->score) return true;
else if (stu->score == b.stu->score && stu->id < b.stu->id) return true;
return false;
}
stup(string id, int score, int loc) :stu(stu = new student(id, score, loc)) {};
};
set
all;
int main()
{
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> K;
set
local; for (int j = 0; j < K; j++) { cin >> id >> score; stup temp = stup(id, score, i); local.insert(temp); all.insert(temp); } int rank = 0, nowrank = 0, score = -1; for (auto it : local) { rank++; if (it.stu->score != score) { score = it.stu->score; nowrank = rank; } it.stu->local_rank = nowrank; } } int rank = 0, nowrank = 0, score = -1; cout << all.size() << endl; for (auto it : all) { rank++; if (it.stu->score != score) { score = it.stu->score; nowrank = rank; } cout << it.stu->id << ' ' << nowrank << ' ' << it.stu->location_number << ' ' << it.stu->local_rank << endl; } }
PAT 1025
最新推荐文章于 2022-10-25 22:40:55 发布