sort的使用
sort在进行自定义结构的排序的时候,需要自定义函数cmp
这里面要注意的是strcmp的使用
strcmp头文件:#include <string.h>
strcmp的返回值有0,<0,>0
PAT 1025 PAT Ranking
一个指标相等时,按照另一指标进行排序
题目中说output must be sorted in nondecreasing order of their registration numbers,但是我没注意,导致最终结果出错了
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
struct Student{
string id;
int score;
int lrank;
int rank;
int g;
};
bool cmp(Student &a,Student &b){
if(a.score!=b.score)
return a.score>b.score;
return a.id<b.id;//保证序列的排序顺序是按照升序来进行的
}
vector<vector<Student>> data;
int main(){
int n;
cin>>n;
int sum=0;
if(n==0){
cout<<0<<endl;
return 0;
}
for(int i=0;i<n;i++)
{
int num;
cin>>num;
sum+=num;
vector<Student> list;
for(int j=0;j<num;j++){
string id;
int score;
cin>>id>>score;
Student st;
st.id=id;
st.score=score;
st.g=i+1;
list.push_back(st);
}
data.push_back(list);
sort(data[i].begin(),data[i].end(),cmp);
for(int k=0;k<data[i].size();k++){
if(k==0) data[i][k].lrank=1;
else{
if(data[i][k].score==data[i][k-1].score){
data[i][k].lrank=data[i][k-1].lrank;
}else{
data[i][k].lrank=k+1;
}
}
}
}
vector<Student> alldata(data[0].begin(),data[0].end());
for(int i=1;i<n;i++){
alldata.insert(alldata.end(),data[i].begin(),data[i].end());
}
sort(alldata.begin(),alldata.end(),cmp);
alldata[0].rank=1;
for(int i=1;i<alldata.size();i++){
if(alldata[i].score==alldata[i-1].score){
alldata[i].rank=alldata[i-1].rank;
}else{
alldata[i].rank=i+1;
}
}
cout<<sum<<endl;
for(int i=0;i<alldata.size();i++){
cout<<alldata[i].id<<" "<<alldata[i].rank<<" "<<alldata[i].g<<" "<<alldata[i].lrank<<endl;
}
return 0;
}