1. 程式人生 > >訓練日誌2

訓練日誌2

tps 沒有 圓心 lan 後來 大小 .cn 自己 容易

這幾天主要是在打比賽 計算幾何寫了一些推公式的題

UVALive 4413

相當於按比例 構造出一種小三角形 想求原來的大三角形

這道題用到了 梅涅勞斯定理 鏈接

簡單來說就是一條過三角形三邊所在直線的直線 有 AD * BE * CF = BD * CE * AF

證明也比較簡單

應用到這題就是由三條直線和三個小三角形得到三個方程 解出來對應比例就可以了

POJ 2208

給你四面體六條邊 求體積

歐拉四面體公式 鏈接

寫的時候也並沒有用公式 直接建系 也是可以算的

UVA 11524

給你一個未知三角形的內切圓以及它將三角形各邊分成的比例 求三角形面積

= =就很氣 剛開始的時候求角度算精度出了問題 卡了好久也沒成功

後來換了一種做法 假如一邊邊長為1 則其他邊可由比例推出來是多少

記該情況下半周長為 p 而實際半周長為 k * p

由面積比例關系可以得到 k * p * R = k * k * S

S為當前假設的三角形的面積 是sqrt(p * (p - a) * (p - b) * (p - c)) (這裏的abc是假設的邊長)

可得k = p * R/ S

所以真正的面積是 (p * R) ^ 2 / S

精度確實比較好了。。。

UVALive4714

和上題類似 感覺更簡單了 註意尋找等量關系就行 這裏用的是大圓和小圓的圓心距

剩下的還有百度之星初賽Round A的 1002

題意大概是 給你n個約束關系 有 x = y , x != y兩種

現在把n個約束關系按照順序劃分成k組 每組只有最後一個關系不成立 前面的都成立

問分的組數和每組約束關系的數量 n <= 10 ^5

剛開始很naive 以為 x = y非法時 只有 x != y 其實和加入的集合也有關系了

我們很容易想到並查集維護相等的關系 至於不等關系 在潘學姐的提示下想到啟發式

我開了兩個set一個存儲並查集的集合元素 另一個存儲與當前集合有沖突的元素有哪些

在 x != y 時可以直接用並查集判是否成立

在 x = y時 我們遍歷較小的集合中的元素 看是否在大集合的沖突集合中出現過

合並時把較小的set插到大的裏面去 沖突集合也同樣合並

總體復雜度nlog^2n 實際上跑得飛快

最近的感受就是自己代碼力欠缺

打百度之星的時候 水題總是敲錯 敲的時候很猶豫 敲完也很方 就很難受

在計算幾何的精度方面還是模棱兩可

拿今天訓練的A來說

先是讀錯題意 以為A B都在圓內 誤導了潘學姐和自己 一下子神話了這道題

之後自己發現很簡單 開始敲之後 感覺考慮的很全面 手出幾組感覺可以 交上去確實WA

就很難受 在WA了幾發之後才A

原因是eps設置的太小 改成1e-6才過

其實題目中給出的坐標的範圍是有意義的

我後來才是在極限大的數據下發現了 比較的數字比較大 小數後幾位可能不準確 才調大了eps

以後的題目在寫完時 應該試著出一些比較大的簡單數據 看是不是夠精度(如果可以出的話

debug時確定算法正確性的情況下 也應該考慮一下用到eps的數字的大小 是比較大還是比較小

接下來想看看圓的反演 和 一些不確定算法和極值的 題目吧

訓練日誌2