题解 P6468 【[COCI2008-2009#6]BAZEN】

· · 题解

Solution

一道比较基础的几何题,只要会鸟头定理和定比分点公式就可以做。

对分类讨论的能力要求很高,如图。(因为终点要在三角形边上)

设起点为 (a,b),则要分以下几类:

  1. a=0,b=0
  2. a=250,b=0
  3. a=0,b=250
  4. a=125,b=125
  5. a=0,b\ne 0,b\le 125
  6. a=0,b\ne 0,b>125
  7. a\ne 0,b=0,a\le 125
  8. a\ne 0,b=0,a>125
  9. a\ne 0,b\ne 0,a>b
  10. 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;
}