PTA-1028——List Sorting

题目:

Excel can sort records according to any column. Now you are supposed to imitate this function.

Input Specification:

Each input file contains one test case. For each case, the first line contains two integers N (≤) and C, where N is the number of records and C is the column that you are supposed to sort the records with. Then N lines follow, each contains a record of a student. A student's record consists of his or her distinct ID (a 6-digit number), name (a string with no more than 8 characters without space), and grade (an integer between 0 and 100, inclusive).

Output Specification:

For each test case, output the sorting result in N lines. That is, if C = 1 then the records must be sorted in increasing order according to ID's; if C = 2 then the records must be sorted in non-decreasing order according to names; and if C = 3 then the records must be sorted in non-decreasing order according to grades. If there are several students who have the same name or grade, they must be sorted according to their ID's in increasing order.

Sample Input 1:

3 1
000007 James 85
000010 Amy 90
000001 Zoe 60

Sample Output 1:

000001 Zoe 60
000007 James 85
000010 Amy 90

Sample Input 2:

4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98

Sample Output 2:

000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60

Sample Input 3:

4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90

Sample Output 3:

000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90

分析:

排序。用cin最后一组数据超时。

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<vector>
 4 #include<cstring>
 5 using namespace std;
 6 int n,c;
 7 struct Student{
 8     int id;
 9     char name[10];
10     int score;
11 };
12 vector<Student> students;
13 
14 bool compareById(Student a,Student b){
15     return a.id<b.id;
16 }
17 
18 bool compareByName(Student a,Student b){
19     int s=strcmp(a.name,b.name);
20     if(s==0){
21         return a.id<b.id;
22     }else{
23         return s<0;
24     }
25 }
26 
27 bool compareByScore(Student a,Student b){
28     if(a.score==b.score){
29         return a.id<b.id;
30     }else{
31         return a.score<b.score;
32     }
33 }
34 
35 int main(){
36     scanf("%d %d",&n,&c);
37 //    cin>>n>>c;
38     for(int i=0;i<n;i++){
39         Student stu;
40         scanf("%d %s %d",&stu.id,stu.name,&stu.score);
41 //        cin>>stu.id>>stu.name>>stu.score;
42         students.push_back(stu);
43     }
44     switch(c){
45         case 1:sort(students.begin(),students.end(),compareById);break;
46         case 2:sort(students.begin(),students.end(),compareByName);break;
47         case 3:sort(students.begin(),students.end(),compareByScore);break;
48     }
49     for(int i=0;i<n;i++){
50 //        cout<<students[i].id<<" "<<students[i].name<<" "<<students[i].score<<endl;
51         printf("%06d %s %d\n",students[i].id,students[i].name,students[i].score);
52     }
53     return 0;
54 }
 

猜你喜欢

转载自www.cnblogs.com/orangecyh/p/10371501.html