HDU打怪公升級之無限的路 2073

2021-08-26 23:35:43 字數 1254 閱讀 4192

甜甜從小就喜歡畫圖畫,最近他買了一支智慧型畫筆,由於剛剛接觸,所以甜甜只會用它來畫直線,於是他就在平面直角座標系中畫出如下的圖形:

甜甜的好朋友蜜蜜發現上面的圖還是有點規則的,於是他問甜甜:在你畫的圖中,我給你兩個點,請你算一算連線兩點的折線長度(即沿折線走的路線長度)吧。

第乙個數是正整數n(≤100)。代表資料的組數。

每組資料由四個非負整數組成x1,y1,x2,y2;所有的數都不會大於100。

對於每組資料,輸出兩點(x1,y1),(x2,y2)之間的折線距離。注意輸出結果精確到小數點後3位。

50 0 0 1

0 0 1 0

2 3 3 1

99 99 9 9

5 5 5 5

1.000

2.414

10.646

54985.047

0.000

根據題目可知,輸入兩個點的座標,需要求得連線兩點的折線長度。要計算兩點的折線長度,可以先計算兩點分別到原點(0,0)的折線距離(下圖中紅色和黃色部分),然後再相減得到結果(藍色部分)。

通過觀察分析可知道在斜率為-1的斜線上,點的橫座標與縱座標的和都是相同的,所以要計算原點到某一點的折線距離,可以通過 該點所在的斜線與y軸相交的點與原點的距離(下圖紅色部分) 加上 相交點與該點的距離(下圖藍色部分) 來求得。比如要求點(i,j)到原點的折線距離,其距離等於(0,i+j)到原點的距離加上i*

假設f(n)表示點(0,n)到原點(0,0)的折線距離。則f(n)的距離可以表示為 f(n-1)+length((0,n-1),(n-1,0))+length((n-1,0),(0,n))。而length((0,n-1),(n-1,0))=

f(n) = f(n-1)+

#include#includeusing namespace std;

int main()

cout.precision(3);

cout.setf(ios::fixed);

while(cin>>n) }

return 0;

}

HDU2073 無限的路

純幾何題。題目是讓求兩點之間的折線距離,很自然的就可以想到分別求出兩點到原點的距離,然後相減即可,本題沒說兩點的先後,再多一步取絕對值就ok了。求一點到原點之間的距離,可以把折線分成兩部分,很容易可以看出,一部分是sqrt 2 的整數倍,另一部分寫幾個就很容易看出,依次是sqrt 1 1 2 2 s...

hdu2073 無限的路

這道題吧我覺得還是有點思維量的。思路 1.我們要求的是兩點之間的距離,可以轉化為點到原點的距離,然後相減。2.首先看這張圖分為兩種線 一種是有點的線 如 0,1 與 1,0 的線 0,2 與 2,0 的線 一種是沒有點的線 如 0,1 與 0,0 的線 0,2 與 1,0 的線,0,3 與 2,0 ...

HDU 2073 無限的路

problem description 甜甜從小就喜歡畫圖畫,最近他買了一支智慧型畫筆,由於剛剛接觸,所以甜甜只會用它來畫直線,於是他就在平面直角座標系中畫出如下的圖形 甜甜的好朋友蜜蜜發現上面的圖還是有點規則的,於是他問甜甜 在你畫的圖中,我給你兩個點,請你算一算連線兩點的折線長度 即沿折線走的路...