PAT甲级1028.

目录

A1028

题目

样例

样例1

输入:

3 1
000007 James 85
000010 Amy 90
000001 Zoe 60

输出:

000001 Zoe 60
000007 James 85
000010 Amy 90

样例2

输入:

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

输出:

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

样例3

输入:

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

输出:

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

思路和坑点

  简单的结构体多级排序,这里考虑到数据量比较大,使用下标排序的方法。对于不同的排序规则,使用全局变量c来控制排序规则。

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,c;
typedef struct node{
    string id,name;
    int score;
}Node;
vector<Node> v;
vector<int> idsort;
bool cmp(int a,int b){
    if(c==1)
        return v[a].id<v[b].id;
    else if(c==2){
        if(v[a].name!=v[b].name)    return v[a].name<v[b].name;
        else                        return v[a].id<v[b].id;
    }
    else{
        if(v[a].score!=v[b].score)    return v[a].score<v[b].score;
        else                        return v[a].id<v[b].id;
    }
}
int main(void){
#ifdef ONLINE_JUDGE
#else
    freopen("1.txt","r",stdin);
#endif
    scanf("%d%d",&n,&c);
    v.resize(n); idsort.resize(n);
    for(int i=0;i<n;i++){
        idsort[i]=i;
        cin>>v[i].id>>v[i].name>>v[i].score;        
    } 
    sort(idsort.begin(),idsort.end(),cmp);
    for(int i=0;i<n;i++){
        int k=idsort[i];
        cout<<v[k].id<<' '<<v[k].name<<' '<<v[k].score<<'\n';
    }
    return 0;
}