游泳池 纪中 1439 数学+二分

Description

  有一个游泳池,形状为等腰直角三角形,直角边长250米。
  这里写图片描述
  游泳池可以看作是在坐标系统中(如上图所示)。用一条两端点在三角形边上的线段把游泳池分成两个面积相同的部分。
  在给定线段其中一个端点的情况下,要你编程输出另一个端点。
  

Input

  输入第一行包含两个整数,表示线段一个端点的坐标,保证给定的端点在直角三角形的边上。

Output

  输出线段另一个端点的坐标,答案保留2位小数。

分析

水题就要水过对不对。
分情况讨论,二分找到边长,然后用秦九韶公式算面积,和另一半比较,相同就可以输出了。
计算坐标即可。(具体见程序*n)
这里还有一个更高级的方法,纯数学——梓豪

代码

const
  ge=1.4142135623730950488016887242097;
  s=250*250/2;
  xb=sqrt(250*250*2);

var
  n,m:Longint;
  l,r,w,ll,mid:real;

procedure tepan(n,m:longint);
begin
  if (n=0) and (m=125)
    then
      begin
        writeln('250.00 0.00');
        halt;
      end;

  if (n=125) and (m=0)
    then
      begin
        writeln('0.00 250.00');
        halt;
      end;

  if (n=250) and (m=0)
    then
      begin
        writeln('0.00 125.00');
        halt;
      end;

  if (n=0) and (m=250)
    then
      begin
        writeln('125.00 0.00');
        halt;
      end;

  if (n=0) and (m=0)
    then
      begin
        writeln('125.00 125.00');
        halt;
      end;

  if (n=125) and (m=125)
    then
      begin
        writeln('0.00 0.00');
        halt;
      end;
end;

function qin_jiu_shao(a,b,c:real):real;
var
  p:real;
begin
  p:=(a+b+c)/2;
  qin_jiu_shao:=p*(p-a)*(p-b)*(p-c);
  qin_jiu_shao:=sqrt(qin_jiu_shao);
end;

begin
  readln(n,m);
  tepan(n,m);
  if (n=0) and (m<125)
    then
      begin
        l:=0;
        r:=xb;
        while l<=r do
          begin
            mid:=(l+r)/2;
            w:=sqr(m-mid/ge)+sqr(250-mid/ge);
            w:=sqrt(w);
            ll:=qin_jiu_shao(250-m,xb-mid,w);
            if abs(ll-s/2)<=0.0001
              then break;
            if ll>s/2
              then l:=mid
              else r:=mid;
          end;
        writeln(250-mid/ge:0:2,' ',mid/ge:0:2);
        halt;
      end;

  if (m=0) and (n<125)
    then
      begin
        l:=0;
        r:=xb;
        while l<=r do
          begin
            mid:=(l+r)/2;
            w:=sqr(n-mid/ge)+sqr(250-mid/ge);
            w:=sqrt(w);
            ll:=qin_jiu_shao(250-n,xb-mid,w);
            if abs(ll-s/2)<=0.0001
              then break;
            if ll>s/2
              then l:=mid
              else r:=mid;
          end;
        writeln(mid/ge:0:2,' ',250-mid/ge:0:2);
        halt;
      end;

  if (n=0) and (m>125)
    then
      begin
        l:=0;
        r:=250;
        while l<=r do
          begin
            mid:=(l+r)/2;
            w:=sqr(mid)+sqr(m);
            w:=sqrt(w);
            ll:=qin_jiu_shao(m,mid,w);
            if abs(ll-s/2)<=0.0001
              then break;
            if ll>s/2
              then r:=mid
              else l:=mid;
          end;
        writeln(mid:0:2,' 0.00');
        halt;
      end;

  if (m=0) and (n>125)
    then
      begin
        l:=0;
        r:=250;
        while l<=r do
          begin
            mid:=(l+r)/2;
            w:=sqr(mid)+sqr(n);
            w:=sqrt(w);
            ll:=qin_jiu_shao(n,mid,w);
            if abs(ll-s/2)<=0.0001
              then break;
            if ll>s/2
              then r:=mid
              else l:=mid;
          end;
        writeln(mid:0:2,' 0.00');
        halt;
      end;

  if (n<125) and (m>125)
    then
      begin
        l:=0;
        r:=250;
        while l<=r do
          begin
            mid:=(l+r)/2;
            w:=sqr(m)+sqr(mid-n);
            w:=sqrt(w);
            ll:=qin_jiu_shao(xb-n*ge,250-mid,w);
            if abs(ll-s/2)<=0.0001
              then break;
            if ll<s/2
              then r:=mid
              else l:=mid;
          end;
        writeln(mid:0:2,' 0.00');
        halt;
      end;

  if (n>125) and (m<125)
    then
      begin
        l:=0;
        r:=250;
        while l<=r do
          begin
            mid:=(l+r)/2;
            w:=sqr(n)+sqr(mid-m);
            w:=sqrt(w);
            ll:=qin_jiu_shao(xb-m*ge,250-mid,w);
            if abs(ll-s/2)<=0.0001
              then break;
            if ll<s/2
              then r:=mid
              else l:=mid;
          end;
        writeln('0.00 ',mid:0:2);
        halt;
      end;
end.

posted @ 2016-07-15 15:56  一个响亮的蒟蒻  阅读(215)  评论(0编辑  收藏  举报