本题题面的数据范围
−2000000<=xi<=2000000然而本人在#7的文件倒数第四行发现x=-2016466。倒数第10行等等也有类似问题。我估计#8范围也有问题,因为我算法无误但得80分,就错在#7#8。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define dis(y) sqrt(d*d-y*y);
using namespace std;
int n,cnt;
double xx,yy,d,pos=-2000001;//这一行,我把pos设置成-2000001,理论是比最小的x还要小,然而我#7输出230,答案231,我把pos多加1个0输出的就是231 正确答案了。
struct island{
double l,r;
};
island a[1009];
bool cmp(const island &x,const island &y){
return x.l<y.l;//按左端点排序
}
int main(){
scanf("%d%lf",&n,&d);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&xx,&yy);
if(yy>d){
printf("-1\n");
return 0;
}
a[i].l=xx-dis(yy);
a[i].r=xx+dis(yy);
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
if(a[i].l>pos){
cnt++;
pos=a[i].r;
}
else pos=min(pos,a[i].r);//这里出现问题
}
printf("%d\n",cnt);
return 0;
}
请求管理员修复,谢谢