超时了,留个坑
#include <bits/stdc++.h>
using namespace std;
const int N = 310;
typedef long long int lli;
struct Student {
lli id;
int grade;
int all_rank;
int area_rank;
int area;
// 如果不使用all_grade, area_grade, 和 area,可以移除它们
};
bool all_cmp(const Student& s1, const Student& s2) {
if (s1.grade != s2.grade) return s1.grade > s2.grade;
else return s1.id < s2.id;
}
bool area_cmp(const Student& s1, const Student& s2) {
if (s1.grade != s2.grade) return s1.grade > s2.grade;
else return s1.id < s2.id;
}
int main() {
//std::ios_base::sync_with_stdio(false);
int area_num;
int stu_num; // 每个区的人数
// cin >> area_num;
scanf("%d",&area_num);
getchar();
vector<vector<Student>> sort_area(area_num); // 分组排名的vector
vector<Student> sort_all; // 全体排名的vector
int sum1 = 0;
for (int i = 0; i < area_num; i++) { // 注意循环从0开始
//cin >> stu_num;
scanf("%d", &stu_num);
getchar(); // 如果有换行符需要跳过
sum1+=stu_num;
sort_area[i].resize(stu_num); // 为每个区域分配足够的空间
for (int j = 0; j < stu_num; j++) { // 注意循环从0开始
// cin >> sort_area[i][j].id >> sort_area[i][j].grade;
scanf("%lld %d", &sort_area[i][j].id, &sort_area[i][j].grade);
sort_area[i][j].area=i+1;
//sort_all[i*area_num+j].id = sort_area[i][j].id;
sort_all.push_back(sort_area[i][j]); // 将整个Student对象添加到sort_all中
}
// 对每个地区的人的分数进行排名
sort(sort_area[i].begin(), sort_area[i].end(), area_cmp);
sort_area[i][0].area_rank = 1;
for(int k=1;k<sort_area[i].size();k++){
if(sort_area[i][k-1].grade!=sort_area[i][k].grade) sort_area[i][k].area_rank = k+1;
else sort_area[i][k].area_rank=sort_area[i][k-1].area_rank;
}
}
// 对全体地区的人的分数进行排名
sort(sort_all.begin(), sort_all.end(), all_cmp);
sort_all[0].all_rank = 1;
for(int i=1;i<sort_all.size();i++){
if(sort_all[i-1].grade!=sort_all[i].grade) sort_all[i].all_rank = i+1;
else sort_all[i].all_rank=sort_all[i-1].all_rank;
}
// cout<<sum1<<endl;
printf("%d\n", sum1); // 使用printf输出数据
//估计这块超时了,咋优化呢
for(int b=0;b<sort_all.size();b++){
printf("%lld %d %d", sort_all[b].id, sort_all[b].all_rank, sort_all[b].area);
// cout<<sort_all[b].id<<' '<<sort_all[b].all_rank<<' '<<sort_all[b].area;
for (int i = 0; i < area_num; i++){
for(int k=0;k<sort_area[i].size();k++){
if (sort_area[i][k].id == sort_all[b].id) printf(" %d", sort_area[i][k].area_rank);
// if(sort_area[i][k].id==sort_all[b].id) cout<<' '<<sort_area[i][k].area_rank;
}
}
printf("\n");
// cout<<endl;
}
return 0;
}