题解 P6468 【[COCI2008-2009#6]BAZEN】
registerGen · · 题解
Solution
一道比较基础的几何题,只要会鸟头定理和定比分点公式就可以做。
对分类讨论的能力要求很高,如图。(因为终点要在三角形边上)
设起点为
-
a=0,b=0 -
a=250,b=0 -
a=0,b=250 -
a=125,b=125 -
a=0,b\ne 0,b\le 125 -
a=0,b\ne 0,b>125 -
a\ne 0,b=0,a\le 125 -
a\ne 0,b=0,a>125 -
a\ne 0,b\ne 0,a>b -
a\ne 0,b\ne 0,a<b
每种情况该怎么推就自己下去搞吧,不难。
Code
#include<cstdio>
#include<algorithm>
#include<cmath>
int main()
{
double a,b;
scanf("%lf%lf",&a,&b);
if(a==0&&b==0)
{
puts("125.00 125.00");
return 0;
}
if(a==250)
{
puts("0.00 125.00");
return 0;
}
if(b==250)
{
puts("125.00 0.00");
return 0;
}
if(a==125&&b==125)
{
puts("0.00 0.00");
return 0;
}
if(a==0&&b!=0&&b<=125)
{
double d1=250.0-b;
double d2=250.0;
double lambda=(1.0/2.0)/(d1/d2);
printf("%.2lf %.2lf\n",250.0*lambda,250.0-250.0*lambda);
return 0;
}
if(a==0&&b!=0&&b>125)
{
double d1=b;
double d2=250.0;
double lambda=(1.0/2.0)/(d1/d2);
printf("%.2lf 0.00\n",250.0*lambda);
return 0;
}
if(a!=0&&b==0&&a<=125)
{
double d1=250.0-a;
double d2=250.0;
double lambda=(1.0/2.0)/(d1/d2);
printf("%.2lf %.2lf\n",250.0-250.0*lambda,250.0*lambda);
return 0;
}
if(a!=0&&b==0&&a>125)
{
double d1=a;
double d2=250.0;
double lambda=(1.0/2.0)/(d1/d2);
printf("0.00 %.2lf\n",250.0*lambda);
return 0;
}
if(a!=0&&b!=0&&a>b)
{
double d1=sqrt(a*a+(250.0-b)*(250.0-b));
double d2=sqrt(250.0*250.0*2);
double lambda=(1.0/2.0)/(d1/d2);
printf("0.00 %.2lf\n",250.0-250.0*lambda);
return 0;
}
if(a!=0&&b!=0&&a<b)
{
double d1=sqrt((250.0-a)*(250.0-a)+b*b);
double d2=sqrt(250.0*250.0*2);
double lambda=(1.0/2.0)/(d1/d2);
printf("%.2lf 0.00\n",250.0-250.0*lambda);
return 0;
}
return 0;
}