PAT_A1028
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;
}