比较函数cmp的条件 疑惑
查看原帖
比较函数cmp的条件 疑惑
755503
LiJinLin_AFO楼主2024/10/22 00:15

错误的:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct r{
	int x,y,z,id;
}a[200005];
int s[200005];
bool cmp1(r c,r d){return c.x>=d.x;}
bool cmp2(r c,r d){return c.y>=d.y;}
bool cmp3(r c,r d){return c.z>=d.z;}
int main(){
	int n;
	scanf("%d",&n);
	memset(s,0x3f,sizeof(s));
	for(int i=1;i<=n;a[i].id=i,i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
	sort(a+1,a+1+n,cmp1);
	for(int i=1,j=1;i<=n;i++){
		if(a[i].x!=a[j].x) j=i;
		s[a[i].id]=min(s[a[i].id],j);
	}
	sort(a+1,a+1+n,cmp2);
	for(int i=1,j=1;i<=n;i++){
		if(a[i].y!=a[j].y) j=i;
		s[a[i].id]=min(s[a[i].id],j);
	}
	sort(a+1,a+1+n,cmp3);
	for(int i=1,j=1;i<=n;i++){
		if(a[i].z!=a[j].z) j=i;
		s[a[i].id]=min(s[a[i].id],j);
	}
	for(int i=1;i<=n;i++) printf("%d\n",s[i]);
	return 0;
}

正确的:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct r{
	int x,y,z,id;
}a[200005];
int s[200005];
bool cmp1(r c,r d){return c.x>d.x;}
bool cmp2(r c,r d){return c.y>d.y;}
bool cmp3(r c,r d){return c.z>d.z;}
int main(){
	int n;
	scanf("%d",&n);
	memset(s,0x3f,sizeof(s));
	for(int i=1;i<=n;a[i].id=i,i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
	sort(a+1,a+1+n,cmp1);
	for(int i=1,j=1;i<=n;i++){
		if(a[i].x!=a[j].x) j=i;
		s[a[i].id]=min(s[a[i].id],j);
	}
	sort(a+1,a+1+n,cmp2);
	for(int i=1,j=1;i<=n;i++){
		if(a[i].y!=a[j].y) j=i;
		s[a[i].id]=min(s[a[i].id],j);
	}
	sort(a+1,a+1+n,cmp3);
	for(int i=1,j=1;i<=n;i++){
		if(a[i].z!=a[j].z) j=i;
		s[a[i].id]=min(s[a[i].id],j);
	}
	for(int i=1;i<=n;i++) printf("%d\n",s[i]);
	return 0;
}

只有三个比较函数的判断条件从“\ge”改为“>>”,为什么一个超时一个正确?

悬赏一关

2024/10/22 00:15
加载中...