题意很简单,坑点在于用string和cin,cout来输入输出最后一个测试点会超时过不去,故采用C语言的方式用strcmp进行比较。
#include<iostream>
#include<string>
#include<algorithm>
#include<string.h>
using namespace std;
#define MAX 100005
struct Student {
char ID[7];
char name[9];
int score;
}stu[MAX];
int N, C;
bool cmp1(Student a, Student b) {
return strcmp(a.ID, b.ID) < 0;
}
bool cmp2(Student a, Student b) {
return strcmp(a.name,b.name)==0?strcmp(a.ID, b.ID) < 0: strcmp(a.name, b.name)<0;
}
bool cmp3(Student a, Student b) {
return a.score==b.score ? strcmp(a.ID, b.ID) < 0 : a.score <b.score;
}
int main() {
scanf("%d %d", &N, &C);
for (int i = 0; i < N; i++) {
scanf("%s %s %d", stu[i].ID, stu[i].name, &stu[i].score);
}
if (C == 1) {
sort(stu, stu + N, cmp1);
for (int i = 0; i < N; i++) {
printf("%s %s %d\n", stu[i].ID, stu[i].name, stu[i].score);
}
}
if (C == 2) {
sort(stu, stu + N, cmp2);
for (int i = 0; i<N; i++) {
printf("%s %s %d\n", stu[i].ID, stu[i].name, stu[i].score);
}
}
if (C == 3) {
sort(stu, stu + N, cmp3);
for (int i = 0; i<N; i++) {
printf("%s %s %d\n", stu[i].ID, stu[i].name, stu[i].score);
}
}
return 0;
}