#include<bits/stdc++.h>
#define MAXN 30005
using namespace std;
struct node{
string sno;
int grade;
int fr;
int lor;
int lonum;
};
node stu[MAXN];
bool cmp(node n1, node n2){
if(n1.grade != n2.grade)return n1.grade > n2.grade; //错因:if(n1.grade > n2.grade)return n1.grade > n2.grade;
else return n1.sno < n2.sno; //分数是从高到低姐姐
}
/*
int main(){
int n, k;
cin >> n;
int num = 0;
for(int i = 0; i < n; i++){
cin >> k;
for(int j = 0; j < k; j++){
cin >> stu[i][j].sno >> stu[i][j].grade;
num++;
stu[i][j].lonum = i+1;
}
sort(stu[i]+num-k, stu[i]+num, cmp); //sort(stu[i], stu[i]+num, cmp);
stu[i][0].lor = 1;
for(int j = 1; j < k; j++){
if(stu[i][j].grade == stu[i][j-1].grade){
stu[i][j].lor = stu[i][j-1].lor;
}else stu[i][j].lor = stu[i][j-1].lor+1;
stu[i][j].lonum = i+1;
}
}
sort(stu[0], stu[0]+num, cmp); //不能stu[0][0], stu[0][0]+num, cmp)
cout << num << endl;
cout << stu[i][j].sno << " " << stu[i][j].fr << " " << stu[i][j].lonum << " " << stu[i][j].lor << endl;
//怎么输出--------------------------------------------------》一维数组的原因
/*for(int i = 0; i < n; i++){
}
return 0;
}
*/
//修改思路:采用一维数组
int main(){
int n, k;
cin >> n;
int num = 0;
for(int i = 0; i < n; i++){
cin >> k;
for(int j = 0; j < k; j++){
cin >> stu[num].sno >> stu[num].grade;
stu[num].lonum = i+1;
num++;
}
sort(stu+num-k, stu+num, cmp); //sort()一维:stu, stu+num; 二维:stu[0], stu[0]+num;
stu[num-k].lor = 1;
for(int j = num-k+1; j < num; j++){ //这里出错:因为第一名已经初始化,所以从第二个开始
if(stu[j].grade == stu[j-1].grade)
stu[j].lor = stu[j-1].lor;
else stu[j].lor = j+1-(num-k); //这里出错:排名并列但是后面的不是顺序数字,而是加上人数后的排名!!
}
}
cout << num << endl;
sort(stu, stu+num, cmp);
stu[0].fr = 1;
cout << stu[0].sno << " " << stu[0].fr << " " << stu[0].lonum << " " << stu[0].lor << endl;
for(int i = 1; i < num; i++){
if(stu[i].grade == stu[i-1].grade)
stu[i].fr = stu[i-1].fr;
else stu[i].fr = i+1;
cout << stu[i].sno << " " << stu[i].fr << " " << stu[i].lonum << " " << stu[i].lor << endl;
}
return 0;
}
1025排序的处理,对排名的处理
最新推荐文章于 2024-02-08 20:35:28 发布