自己写的用超时。
以下为他人做的,不超时
http://blog.csdn.net/lv_zj/article/details/16114247
#include <string.h>
#include <algorithm>
#include <stdio.h>
class cstudent
{
public:
int id;
char name[10];
int score;
friend bool IdCmp(const cstudent &s1,const cstudent &s2);
friend bool NameCmp(const cstudent &s1,const cstudent &s2);
friend bool ScoreCmp(const cstudent &s1,const cstudent &s2);
};
bool IdCmp(const cstudent &s1,const cstudent &s2)
{
return s1.id<s2.id;
}
bool NameCmp(const cstudent &s1,const cstudent &s2)
{
int icmp=strcmp(s1.name,s2.name);
if(icmp==0) return s1.id<s2.id;
else return icmp<0;
}
bool ScoreCmp(const cstudent &s1,const cstudent &s2)
{
if(s1.score==s2.score) return s1.id<s2.id;
else return s1.score<s2.score;
}
class CA
{
public:
enum{N=100010};
void run();
cstudent vs[N];
};
void CA::run()
{
int n,k;
cstudent stu;
scanf("%d%d",&n,&k);
int i;
for(i=0;i<n;i++)
{
scanf("%d%s%d",&stu.id,stu.name,&stu.score);
vs[i]=stu;
}
if(k==1)
{
std::sort(vs,vs+n,IdCmp);
}
else if(k==2)
{
std::sort(vs,vs+n,NameCmp);
}
else if(k==3)
{
std::sort(vs,vs+n,ScoreCmp);
}
for(i=0;i<n;i++)
{
printf("%06d %s %d\n",vs[i].id,vs[i].name,vs[i].score);
}
}
int main()
{
// freopen("test.in","r",stdin);
CA *a=new CA;
a->run();
return 0;
}
参考2: