HDU-1862-EXCEL排序

#include<iostream>
#include<string>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
/*
    看一下数据量十万,所以普通的冒泡排序什么的肯定是不行的了,快排轻松搞定;
    题目说C=1,2,3,分三种情况排序,所以我们就定义三个sort排序,用switch-case搞定选择使用哪一种排序;
*/
int n,m,t;
struct node
{
    string id;
    string name;
    int score;
}stu[100005];
bool cmp1(node x,node y)    //  C=1时;
{
    return x.id<y.id;
}bool cmp2(node x,node y)   //  C=2时;
{
    if(x.name!=y.name) return x.name<y.name;    //  题目没有说明名字相同的时候怎么处理,这就是个坑啊,
    return x.id<y.id;                           //  重名按学号非递减排序;
}bool cmp3(node x,node y)   //  C=3时;
{
    if(x.score!=y.score) return x.score<y.score;
    return x.id<y.id;
}
int main()
{
    cin.sync_with_stdio(false);
    while(cin>>n>>m){
        if(!n) break;
        for(int i=0;i<n;i++){
            cin>>stu[i].id>>stu[i].name>>stu[i].score;
        }
        switch(m){
            case 1: sort(stu,stu+n,cmp1);break;
            case 2: sort(stu,stu+n,cmp2);break;
            case 3: sort(stu,stu+n,cmp3);break;
        }
        cout<<"Case "<<++t<<":"<<endl;
        for(int i=0;i<n;i++){
            cout<<stu[i].id<<' '<<stu[i].name<<' '<<stu[i].score<<endl;
        }
    }
    return 0;
}



你可能感兴趣的:(sort,快排,HDU1862)