P10410 题解
本题其实不用复杂的数学推理。
思路
题目中要求的是
关于三分中的计算,由于已知
AC CODE
#include<bits/stdc++.h>
using namespace std;
#define y1 y_1
double dis(double x1,double y1,double x2,double y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double S(double x1,double y1,double x2,double y2,double x3,double y3) {
double a=dis(x1,y1,x2,y2);
double b=dis(x2,y2,x3,y3);
double c=dis(x3,y3,x1,y1);
double s=(a+b+c)/2.0;
return sqrt(s*(s-a)*(s-b)*(s-c));
}
double arr(double x1,double y1,double x2,double y2,double x3,double y3,double p) {
double dx1=x2+(x1-x2)*p,dy1=y2+(y1-y2)*p;
double dx2=x3+(x2-x3)*p,dy2=y3+(y2-y3)*p;
double dx3=x1+(x3-x1)*p,dy3=y1+(y3-y1)*p;
double ABC=S(x1,y1,x2,y2,x3,y3);
double DEF=S(dx1,dy1,dx2,dy2,dx3,dy3);
return DEF/ABC;
}
const double EPS=1e-9;
double l,r,x1,y1,x2,y2,x3,y3;
int main(){
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&l,&r,&x1,&y1,&x2,&y2,&x3,&y3);
while(r-l>EPS){
double mid1=l+(r-l)/3.0,mid2=r-(r-l)/3.0;
if(arr(x1,y1,x2,y2,x3,y3,mid1)<arr(x1,y1,x2,y2,x3,y3,mid2))
r=mid2;
else l=mid1;
}
printf("%.12lf\n",S(x1,y1,x2,y2,x3,y3)*arr(x1,y1,x2,y2,x3,y3,l));
return 0;
}