# zznuoj 2174: 水题一发 希望笑纳

http://47.93.249.116/problem.php?id=2174

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<vector>
#include<math.h>
#include<string>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define N 1009
#define Lson rood<<1
#define Rson rood<<1|1
#define PI acos(-1)
#define eps 1e-8
double q(double x1,double y1,double r1,double x2,double y2,double r2)
{
double d=1.0*sqrt((x1-x2)*(x1-x2)+1.0*(y1-y2)*(y1-y2));
if(r1+r2<d+eps) return 0;
if(d<fabs(r1-r2)+eps)
return min(PI*r1*r1,PI*r2*r2);
double x = (d*d + r1*r1 - r2*r2)/(2*d);
double t1 = acos(x / r1);
double t2 = acos((d - x)/r2);
return r1*r1*t1 + r2*r2*t2 - d*r1*sin(t1);
}
int main()
{
double x1,x2,y1,y2,r1,S;
while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&S)!=EOF)
{
LL r=ceil(sqrt((x1-x2)*(x1-x2)+1.0*(y1-y2)*(y1-y2)))+r1,l=1;
while(l<=r)
{
LL mid=(l+r)/2;
double sum=q(x1,y1,r1,x2,y2,mid);
if(fabs(sum-S)<0.1)
{
printf("%lld\n",mid);
break;
}
if(sum>S)
r=mid-1;
else l=mid+1;
}
}
return 0;
}

posted on 2018-08-18 19:26  云胡不喜。  阅读(351)  评论(0编辑  收藏  举报