原题传送门:HDU1862
中文题,题意挺好理解,不过多赘述。
但是实现起来却碰到诸多问题,写了近200行才AC,很是繁琐,自己都看不下去,后参考诸多大神方案,大多自行编写函数使用sort或者qsort按特定意图进行排序。非常值得学习!
C++ AC代码如下:
#include<iostream>
#include<algorithm>
#include<string>
#include<stdio.h>
using namespace std;
struct info{
int grade;
string num,name;
}s[100001];
bool f1(info x,info y)
{
return x.num<y.num;
}
bool f2(info x,info y)
{
if(x.name==y.name) return x.num<y.num;
return x.name<y.name;
}
bool f3(info x,info y)
{
if(x.grade==y.grade) return x.num<y.num;
return x.grade<y.grade;
}
int main()
{
int n,c,sum=0;
while(cin>>n>>c&&(n||c))
{
for(int i=0;i<n;i++)
cin>>s[i].num>>s[i].name>>s[i].grade;
if(c==1)
sort(s,s+n,f1);
else if(c==2)
sort(s,s+n,f2);
else
sort(s,s+n,f3);
cout<<"Case "<<++sum<<':'<<endl;
for(int i=0;i<n;i++)
cout<<s[i].num<<' '<<s[i].name<<' '<<s[i].grade<<endl;
}
return 0;
}