社区讨论
谜之RE
UVA10382UVA10382 Watering Grass参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mi7ur8cj
- 此快照首次捕获于
- 2025/11/21 03:56 4 个月前
- 此快照最后确认于
- 2025/11/21 03:56 4 个月前
C
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
const double inf=1000000.0;
struct node{
int x,r;
inline bool operator < (const node &other)const{
return r>other.r;
}
}a[1000010];
struct point{
double l,r;
inline bool operator < (const point &other)const{
return r==other.r?l<other.l:r<other.r;
}
}b[1000010];
int main(){
freopen("g.in","r",stdin);
freopen("g.out","w",stdout);
int n,l,w,ok=0;
while(cin>>n>>l>>w){
if(ok) cout<<endl;
ok=1;
for(register int i=1;i<=n;++i)
cin>>a[i].x>>a[i].r;
sort(a+1,a+1+n);
for(register int i=1;i<=n;++i){
if((a[i].r*2)<w){
n=i-1;
break;
}
double k=sqrt(double(a[i].r)*a[i].r-double(w)*w/4);
b[i].l=double(a[i].x)-k;
b[i].r=double(a[i].x)+k;
}
sort(b+1,b+1+n);
if(b[n].r<l){
cout<<-1;
continue;
}
int j,tag=0,ans=1;
double mn=inf;
for(register int i=n;i;--i)
if(b[i].r>=l){
if(b[i].l<mn){
mn=b[i].l;
tag=i;
}
}
j=tag;
if(b[j].l<0){
cout<<ans;
continue;
}
while(1){
tag=0;mn=inf;
for(register int i=j-1;i;--i)
if(b[i].r>=b[j].l&&b[j].l>=b[i].l){
if(b[i].l<mn){
mn=b[i].l;
tag=i;
}
}
if(!tag) break;
j=tag;
++ans;
if(b[j].l<=0) break;
}
if(b[j].l>0) cout<<-1;
else cout<<ans;
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...