Input Specification:
Each input file contains one test case. For each case, the first line contains two integers N (≤10
5
) 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题解
#includeusing namespace std; int n,c; // 总共输入三行 // 定义学生信息结构体 struct NODE { int no; string name; int score; }; int cmp(NODE a, NODE b) { if(c == 1) { return a.no < b.no;// 从小到大顺序 } else if(c == 2) { // If there are several students who have the same name or grade, they must be sorted according to their ID's in increasing order. if(a.name != b.name) { return a.name < b.name; } else{ return a.no < b.no; } } else if(c == 3){ if(a.score != b.score) { return a.score < b.score; } else{ return a.no < b.no; } } } int main() { cin>>n>>c; vector node(n); // 定义一个数组存储三个学生的结构体 // 读入学生信息 for(int i = 0; i < n; i++) { cin>>node[i].no>>node[i].name>>node[i].score; } // 排序 注意第三个参数:定义排序的规则 sort(node.begin(),node.end(),cmp); for(int i = 0; i < n; i++) { printf("%06d %s %dn",node[i].no,node[i].name.c_str(),node[i].score); } return 0; }



