#include<bits/stdc++.h>
using namespace std;
struct comp
{
bool operator()(pair<double,double> a,pair<double,double> b)
{
return a.first+a.second<b.first+b.second;
}
};
priority_queue< pair<double,double>,vector< pair<double,double> >,comp > pq;
double dis(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double get(pair<double,double> p,double X,double R)
{
double lt=0,rt=R,ans=0;
while(rt-lt>1e-5)
{
double mid=(lt+rt)/2;
if(dis(p.first,p.second,X,mid)>=mid+p.second) lt=ans=mid;
else rt=mid;
}
return ans;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
cout<<setprecision(3)<<fixed;
for(int i=1;i<=n;i++)
{
long long X,R;
cin>>X>>R;
if(i==1)
{
cout<<R<<"\n";
pq.push({X,R});
}
else
{
priority_queue< pair<double,double>,vector< pair<double,double> >,comp > res=pq;
double ans=R;
while(!res.empty()) ans=min(ans,get(res.top(),X,R)),res.pop();
cout<<ans<<"\n";
pq.push({X,ans});
if(pq.size()>22) pq.pop();
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |