传送门
思路
排序基本模板题,只需要注意超时的问题。 //以下代码加快cin和cout效率(否则最后一个测试点会超时)或者直接使用 scanf和printf来读入和输出 ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
参考题解
#include<iostream> #include<cstring> #include<string> #include<algorithm> using namespace std; /* 排序模板题 */ struct student{ char id[7],name[10]; int grade; }stus[100010]; bool cmp1(student a,student b){//排序规则 1 return strcmp(a.id,b.id)<0; } bool cmp2(student a,student b){//排序规则 2 if(strcmp(a.name,b.name)!=0)return strcmp(a.name,b.name)<0; else return strcmp(a.id,b.id)<0; } bool cmp3(student a,student b){//排序规则 3 if(a.grade!=b.grade)return a.grade<b.grade; else return strcmp(a.id,b.id)<0; } int main(){ //加快cin和cout效率(否则最后一个测试点会超时) //或者直接使用 scanf和printf来读入和输出 ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,c; cin>>n>>c; for(int i=0;i<n;i++){ cin>>stus[i].id>>stus[i].name>>stus[i].grade; } switch(c){ case 1: sort(stus,stus+n,cmp1); break; case 2: sort(stus,stus+n,cmp2); break; case 3: sort(stus,stus+n,cmp3); break; default:break; } for(int i=0;i<n;i++){ cout<<stus[i].id<<" "<<stus[i].name<<" "<<stus[i].grade<<endl; } return 0; }