一道排序题
看题目戳这
我用四个数组模拟四个类别的人
只有一个小细节
我的cmp函数里的名字按升序排列时这样写就过了
return strcmp(x.name,y.name)<0;
而return strcmp(x.name,y.name);
省去<0则会发生段错误和超时
很奇怪
我给不出解释
以下是通过代码
#include<bits/stdc++.h>
using namespace std;
int n,l,h;
struct node{
char name[15];
int v,t;
}p1[100005],p2[100005],p3[100005],p4[100005];
bool cmp(node x,node y){
int a=x.t+x.v,b=y.t+y.v;
if(a!=b){
return a>b;
}else {
if(x.v!=y.v){
return x.v>y.v;
}else {
return strcmp(x.name,y.name)<0;//return strcmp(x.name,y.name)为啥不可以???;
}
}
}
int main(){
int t,v,cnt1=0,cnt2=0,cnt3=0,cnt4=0;
char name[15];
scanf("%d%d%d",&n,&l,&h);
getchar();
for(int i=0;i<n;i++){
scanf("%s%d%d",name,&v,&t);
if(t>=h&&v>=h){
strcpy(p1[cnt1].name,name);
p1[cnt1].t=t;
p1[cnt1].v=v;
cnt1++;
}else if(l<=t&&t<h&&v>=h){
strcpy(p2[cnt2].name,name);
p2[cnt2].t=t;
p2[cnt2].v=v;
cnt2++;
}else if(v>=t&&t>=l&&v>=l){
strcpy(p3[cnt3].name,name);
p3[cnt3].t=t;
p3[cnt3].v=v;
cnt3++;
}else if(v>=l&&t>=l){
strcpy(p4[cnt4].name,name);
p4[cnt4].t=t;
p4[cnt4].v=v;
cnt4++;
}
}
sort(p1,p1+cnt1,cmp);
sort(p2,p2+cnt2,cmp);
sort(p3,p3+cnt3,cmp);
sort(p4,p4+cnt4,cmp);
printf("%d\n",cnt1+cnt2+cnt3+cnt4);
for(int i=0;i<cnt1;i++){
printf("%s %d %d\n",p1[i].name,p1[i].v,p1[i].t);
}
for(int i=0;i<cnt2;i++){
printf("%s %d %d\n",p2[i].name,p2[i].v,p2[i].t);
}
for(int i=0;i<cnt3;i++){
printf("%s %d %d\n",p3[i].name,p3[i].v,p3[i].t);
}
for(int i=0;i<cnt4;i++){
printf("%s %d %d\n",p4[i].name,p4[i].v,p4[i].t);
}
return 0;
}