1.string类型scanf读入需要预先分配空间 printf用到.c_str()
2.用cout会超时
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include<set>
#include<map>
#include<sstream>
using namespace std;
typedef long long LL;
typedef struct Rc {
string ID, name;
int grade;
friend ostream& operator<<(ostream& Out, const Rc & R) {
Out << R.ID <<" " << R.name << " " << R.grade << endl;
}
} R;
int cmp1(R a, R b) {
return a.ID < b.ID;
}
int cmp2(R a, R b) {
if(a.name == b.name) {
return a.ID < b.ID;
}
return a.name < b.name;
}
int cmp3(R a, R b) {
if(a.grade == b.grade) {
return a.ID < b.ID;
}
return a.grade < b.grade;
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
R a[n];
for(int i=0; i<n; i++) {
cin >> a[i].ID >> a[i].name >> a[i].grade;
//scanf("%s %s %d", &a[i].ID, &a[i].name, &a[i].grade);
}
if(k == 1) {
sort(a, a+n, cmp1);
}
if(k == 2) {
sort(a, a+n, cmp2);
}
if(k == 3) {
sort(a, a+n, cmp3);
}
for(int i=0; i<n; i++) {
// cout << a[i].ID << " "<< a[i].name<< " " << a[i].grade << endl;
printf("%s %s %d\n", a[i].ID.c_str(), a[i].name.c_str(), a[i].grade);
}
return 0;
}