1 条题解

  • 0
    @ 2025-8-24 22:21:04

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar registerGen
    一切都是野蛮的。要反对这种野蛮,我们必须也学会野蛮。

    搬运于2025-08-24 22:21:04,当前版本为作者最后更新于2020-04-30 11:45:35,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Solution

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

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

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

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

    信息

    ID
    5494
    时间
    1000ms
    内存
    125MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者