错误的:
#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;
}
只有三个比较函数的判断条件从“≥”改为“>”,为什么一个超时一个正确?
悬赏一关