天天看點

HDU 6097 Mindis(反演)

【題目連結】hdu 6097

【題意】有一個圓心在原點的圓,給定圓的半徑,給定P、Q兩點坐标(PO=QO,P、Q不在圓外),取圓上一點D,求PD+QD的最小值。

【樣例】

Sample Input

4
4
4 0
0 4
4
0 3
3 0
4
0 2
2 0
4
0 1
1 0      

Sample Output

5.6568543
5.6568543
5.8945030
6.7359174      

【分析】

不總是中垂線上的點取到最小值,考慮點在圓上的極端情況。

做P點關于圓的反演點P',OPD與ODP'相似,相似比是|OP| : r。

Q點同理。

極小化PD+QD可以轉化為極小化P'D+Q'D。

當P'Q'與圓有交點時,答案為兩點距離,否則最優值在中垂線上取到。

時間複雜度 O(1)。

>畫了兩種情況的圖,如下:

HDU 6097 Mindis(反演)
HDU 6097 Mindis(反演)

>二維上反演以一個特定的反演圓為基礎:圓心O為反演中心,圓半徑為常數k,把點P反演為點P'就是使得OP×OP'=k^2。

如點P在圓外可這樣作:過點P作圓的切線(兩條),兩個切點相連與OP連線交點就是點P'。

如點P在圓内就把這一過程反過來即可:連結OP,過點P作直線垂直于OP,直線與圓的交點處的切線與OP延長線的交點就是點P'。

如點P在圓上,反演後仍是它自身。

【代碼】待補。