PAT 1028 List Sorting

    xiaoxiao2025-09-03  21

    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 (≤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

    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

     大概题意:给出n个数(一个数有三列),按照第m列排序,输出排序结果

    #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int maxn = 1e5+5; struct node{ string id; string name; int value; }a[maxn]; bool cmp1(const node& s1, const node& s2) { if(s1.id == s2.id) { if(s1.name == s2.name) return s1.value < s2.value; return s1.name < s2.name; } return s1.id < s2.id; } bool cmp2(const node& s1, const node &s2) { if(s1.name == s2.name) { if(s1.id == s2.id) return s1.value < s2.value; return s1.id < s2.id; } return s1.name < s2.name; } bool cmp3(const node& s1, const node& s2) { if(s1.value == s2.value) { if(s1.id == s2.id) return s1.name < s2.name; return s1.id < s2.id; } return s1.value < s2.value; } int main() { int n, m; cin >> n >> m; for(int i = 0; i < n; i++) cin >> a[i].id >> a[i].name >> a[i].value; if(m == 1) sort(a, a+n, cmp1); if(m == 2) sort(a, a+n, cmp2); if(m == 3) sort(a, a+n, cmp3); for(int i = 0; i < n; i++) printf("%s %s %d\n", a[i].id.c_str(), a[i].name.c_str(), a[i].value); return 0; }

     

    最新回复(0)