1178: Classement des résultats
Limite de temps: 1000 ms Limite de mémoire: 65536 Ko
Commits: 18913 Passes: 7545
【Description du titre】
Étant donné le relevé de notes d'un cours dans la classe, veuillez trier et produire le relevé de notes en fonction de la note de haut en bas. S'il y a les mêmes notes, le nom est en premier dans l'ordre.
【Entrez】
La première ligne est n (0 <n <20), indiquant le nombre d'élèves dans la classe;
Dans les n lignes suivantes, chaque ligne est le nom de chaque élève et ses notes, séparées par un seul espace. Le nom ne contient que des lettres et la longueur ne dépasse pas 20, et le score est un entier non négatif ne dépassant pas 100.
【Sortie】
Triez les transcriptions de haut en bas et sortez-les. Chaque ligne contient le nom et la partition, avec un espace entre elles.
【Exemple d'entrée】
4 Kitty 80 Hanmeimei 90 Joey 92 Tim 28
[Exemple de sortie]
Joey 92 Hanmeimei 90 Kitty 80 Tim 28
Expliquez dans le code.
#include<bits/stdc++.h>
using namespace std;
struct student{
string name;
int score;
};
student a[25];
int n;
bool cmp(student x,student y){
// 复杂的cmp写法
/*
if(x.score>y.score){
return true;
}else if(x.score==y.score){
if(x.name<y.name)
return true;
else
return false;
}else{
return false;
}
*/
// 简单的cmp
if (x.score != y.score) {
return x.score > y.score;
}
return x.name < y.name;
}
int main(){
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].score;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n-i;j++){
if( !cmp(a[j],a[j+1]) ){ // 这里记得是 !
swap(a[j],a[j+1]); // swap真强大
}
}
}
for(int i=1;i<=n;i++){
cout<<a[i].name<<" "<<a[i].score<<"\n";
}
return 0;
}
/*
测试数据要记得试试字典序排序有无错,如:
4
Kitty 80
BC 90
ABC 90
Tim 28
*/