题意:
输入一个正整数N(<=100000)和C(C属于{1,2,3}),接下来输入N行,每行包括学生的六位学号(习惯用string输入,因为可能有前导零),名字和成绩(正整数)。输出排序后的信息,排序根据C决定。
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 typedef struct student{ 5 string id,name; 6 int grade; 7 }; 8 student s[100007]; 9 bool cmp(student a,student b){ 10 return a.id<b.id; 11 } 12 bool cmp2(student a,student b){ 13 if(a.name!=b.name) 14 return a.name<b.name; 15 return a.id<b.id; 16 } 17 bool cmp3(student a,student b){ 18 if(a.grade!=b.grade) 19 return a.grade<b.grade; 20 return a.id<b.id; 21 } 22 int main(){ 23 int n,c; 24 cin>>n>>c; 25 for(int i=1;i<=n;++i) 26 cin>>s[i].id>>s[i].name>>s[i].grade; 27 if(c==1) 28 sort(s+1,s+1+n,cmp); 29 else if(c==2) 30 sort(s+1,s+1+n,cmp2); 31 else if(c==3) 32 sort(s+1,s+1+n,cmp3); 33 for(int i=1;i<=n;++i){ 34 cout<<s[i].id<<" "<<s[i].name<<" "<<s[i].grade; 35 cout<<((i==n)?"":" "); 36 } 37 return 0; 38 }