游泳池 紀中 1439 數學 二分

2021-07-14 23:51:58 字數 4205 閱讀 7310

有乙個游泳池,形狀為等腰直角三角形,直角邊長250公尺。

游泳池可以看作是在座標系統中(如上圖所示)。用一條兩端點在三角形邊上的線段把游泳池分成兩個面積相同的部分。

在給定線段其中乙個端點的情況下,要你程式設計輸出另乙個端點。

輸入第一行包含兩個整數,表示線段乙個端點的座標,保證給定的端點在直角三角形的邊上。

輸出線段另乙個端點的座標,答案保留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 ll2

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 ll2

then

r:=mid

else

l:=mid;

end;

writeln('0.00 ',mid:0:

2); halt;

end;

end.

zoj 4029(數學 二分)

zoj 4029 思路 先預處理所有的ai i的字首和情況,因為i最多是30,p i ai,i在10 9內,所以可以確定i的邊界 然後對每個pi處理,將所有的求出ai每次求出pi對應的sum,再求出zi。參考文章 include include include includeusing namesp...

水位上公升的泳池中游泳 二分的應用

題目大概的意思是在乙個n n的泳池中,有n n個高度不一的泳池,現在開始下雨了,每單位時間水位上公升一格,你現在在泳池的左上方,你只能游向被泳池淹沒的位置,假設你游泳的時間可不計,問要等待多久才能遊到泳池的右下方。示例輸入 0,2 1,3 0 2 1 3 示例輸出 3題意簡化即為需要等待多少時間,左...

HDU 2493 Timer 數學(二分 積分)

題意 給你乙個圓錐,水平放置,圓錐中心軸與地面平行,將圓錐裝滿水,在圓錐某一表面開乙個小洞,流出來水的體積為v,給你地面直徑d,高h,讓你求小洞裡地面的距離。保證距離大於等於半徑,小於等於直徑 題解 因為流出來水的那部分是乙個不規則形狀 相當於將圓錐水平切開,截面是乙個三角形 我們可以二分答案下降高...