POJ 1039 Pipe 題解
這題屬實(shí)陰間,明明20內(nèi)的數(shù)據(jù),第三層循環(huán)不剪枝會(huì)t,%.2lf輸出會(huì)WA,ans必須從-Infinity開始更新。
題目大意:給你一條曲折的管道,管道y向?qū)挾扔肋h(yuǎn)為1,你可以在管道入口射一束光,求這束光最遠(yuǎn)能射到的x坐標(biāo)。注意光不會(huì)被反射,會(huì)被管壁所阻擋。但管子端點(diǎn)如果在光前進(jìn)路線上則不算擋住光。管道數(shù)<=20(?)
善用Geogebra
題目本身的英文描述寫的真的讀的我一頭霧水= =因?yàn)閿?shù)據(jù)范圍不算大(?)題目入手方向還是枚舉線段的端點(diǎn),拿一條直線來暴力檢驗(yàn)。
思路:最優(yōu)的一條光線只有可能是與某兩條管道中的兩個(gè)端點(diǎn)相交的直線。因?yàn)槿绻皇?,則平移這條直線則會(huì)得到一個(gè)更優(yōu)的解。
細(xì)節(jié):n^2枚舉管子的線段,不能只從入口的兩個(gè)端點(diǎn)去算解,因?yàn)樽顑?yōu)光線不一定經(jīng)過入口的端點(diǎn)。注意管子端點(diǎn)的處理,如果只是僅僅忽略端點(diǎn)則有可能光線穿出管子導(dǎo)致未預(yù)期的解,如圖。

具體實(shí)現(xiàn):將題目所給的管子端點(diǎn)構(gòu)造出描述整個(gè)管子的線段對(duì)象。
枚舉:雙層枚舉這些線段,用前一維的from與后一維的to構(gòu)造一個(gè)待驗(yàn)證光線(直線對(duì)象)
檢驗(yàn):枚舉線段,用直線去與線段所在直線求交點(diǎn),如果交點(diǎn)在線段內(nèi),判斷是不是在端點(diǎn)上。并且為了不讓光線穿出管道,我們要分類討論上下管道壁。對(duì)于上壁,當(dāng)且僅當(dāng)交點(diǎn)為from且管壁的斜率小于光線斜率的時(shí)候會(huì)被阻擋,對(duì)于下壁,管壁斜率大于光線斜率時(shí)光線會(huì)被阻擋。