游泳池_纪中1439_二分+水
来源:互联网 发布:roseonly永生花 知乎 编辑:程序博客网 时间:2024/05/21 08:59
Description
有一个游泳池,形状为等腰直角三角形,直角边长250米。
游泳池可以看作是在坐标系统中(如上图所示)。用一条两端点在三角形边上的线段把游泳池分成两个面积相同的部分。
在给定线段其中一个端点的情况下,要你编程输出另一个端点。
Input
输入第一行包含两个整数,表示线段一个端点的坐标,保证给定的端点在直角三角形的边上。
Output
输出线段另一个端点的坐标,答案保留2位小数。
分析
水题就要水过对不对
分情况讨论,二分找到边长,计算坐标即可
code
const s=250*250/2; xb=sqrt(250*250*2); ge=1.4142135623730950488016887242097;var n,m:Longint; l,r,w,ll,mid:real;function hellen(a,b,c:real):real;var p:real;begin p:=(a+b+c)/2; hellen:=p*(p-a)*(p-b)*(p-c); hellen:=sqrt(hellen);end;begin readln(n,m); 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; 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:=hellen(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:=hellen(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:=xb; while l<=r do begin mid:=(l+r)/2; w:=sqr(mid)+sqr(m); w:=sqrt(w); ll:=hellen(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:=xb; while l<=r do begin mid:=(l+r)/2; w:=sqr(mid)+sqr(n); w:=sqrt(w); ll:=hellen(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<>0)and(m<>0)and(n>125)and(m<125) then begin l:=0; r:=xb; while l<=r do begin mid:=(l+r)/2; w:=sqr(n)+sqr(mid-m); w:=sqrt(w); ll:=hellen(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; if (n<>0)and(m<>0)and(n<125)and(m>125) then begin l:=0; r:=xb; while l<=r do begin mid:=(l+r)/2; w:=sqr(m)+sqr(mid-n); w:=sqrt(w); ll:=hellen(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'); end;end.
0 0
- 游泳池_纪中1439_二分+水
- 游泳池 纪中 1439 数学+二分
- 圆周舞蹈_纪中1745_二分查找
- 电费结算_纪中3018_二分
- 回家_纪中1445_bfs+二分
- 买汽水_纪中2948_dfs+二分查找
- Window_纪中1326_水_单调队列
- 餐桌_纪中1237_水暴力
- 删除_纪中1381_暴力
- 输油管道_纪中1432_暴力
- 直角三角形_纪中2543_暴力?
- 旅行_纪中2547_枚举
- 麻将_纪中3066_模拟
- 十滴水_纪中1702_模拟
- 查找_二分查找
- 20170927_二分查找
- 【算法】图论_二分图_匹配
- 第八届蓝桥杯_分巧克力_二分
- Android趣闻+++专业名词
- LeetCode题解-110-Balanced Binary Tree
- 使用httpclient与第三方公司对接传递数据NameValuePair的用法
- 一款好用的远程工具
- 文件类型和文件类型模型
- 游泳池_纪中1439_二分+水
- android快速开发框架xUtils
- JDK+MyEclipse+Tomcat配置
- TortoiseGit之配置密钥
- HTML/CSS 自定义开关按钮控件(switch)样式
- 文件系统简介及软硬连接
- Android Studio离线配置
- 验证码
- NYOJ-14会场安排问题