#include<iostream>
#include<algorithm>
using namespace std;
struct Student{
string id;
string name;
int score;
};
Student student[10020];
bool cmp1(Student a,Student b)
{
return a.id<b.id;
}
bool cmp2(Student a,Student b)
{
if(a.name!=b.name)
return a.name<b.name;
else
return a.id<b.id;
}
bool cmp3(Student a,Student b)
{
if(a.score!=b.score)
return a.score<b.score;
else
return a.id<b.id;
}
int main()
{
int n,c;
cin>>n>>c;
for(int i=0;i<n;i++)
{
cin>>student[i].id>>student[i].name>>student[i].score;
}
if(c==1)
sort(student,student+n,cmp1);
else if(c==2)
sort(student,student+n,cmp2);
else
sort(student,student+n,cmp3);
for(int i=0;i<n;i++)
i==n-1?cout<<student[i].id<<' '<<student[i].name<<' '<<student[i].score:cout<<student[i].id<<' '<<student[i].name<<' '<<student[i].score<<endl;
return 0;
}
此题如果使用cin,cout会在最后一个测试点超时,如果想拿满分就要用scnaf,printf,而string类是不能用scanf来读入的。所以要改就需要连结构体一起修改
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxn = 100001;
struct NODE {
int no, score;
char name[10];
}node[maxn];
int c;
int cmp1(NODE a, NODE b) {
if(c == 1) {
return a.no < b.no;
} else if(c == 2) {
if(strcmp(a.name, b.name) == 0) return a.no < b.no;
return strcmp(a.name, b.name) <= 0;
} else {
if(a.score == b.score) return a.no < b.no;
return a.score <= b.score;
}
}
int main() {
int n;
scanf("%d%d", &n, &c);
for(int i = 0; i < n; i++)
scanf("%d %s %d", &node[i].no, node[i].name, &node[i].score);
sort(node, node + n, cmp1);
for(int i = 0; i < n; i++)
printf("%06d %s %d\n", node[i].no, node[i].name, node[i].score);
return 0;
}