- 考慮二分這個 k,我們暴力建出圖,用 hash 來判重和連邊,合法當且僅當沒有環,考慮怎麼輸出方案,首先可以在 dag 貪心出每個點向後的最長鏈,只需要考慮起點,發現需要支持比較兩個串的字典序,選好起點之後在 dag 上貪心選最小的後繼即可,Code
- 首先考慮在上方 d 走了不超過半圈的情況,簡單推導可以得到就是積這麼一個東西
∫abd∗(cos(Rx+α)cos(Rx)−1)dx=∫a+db+dd∗(cosycos(Ry−α)−1)dy∫a+db+dd∗(cosα+tanRysinα−1)dy∫d∗(cosα+tanRysinα−1)dy=d(cosαRy−Rsinαln(cosRy)−Ry)=d((cosα−1)Rx−Rsinαln(cos(Rx+d))
- 下面考慮轉了多圈的情況(準確的說是多個半圈,因爲在圓的兩半計算方式是不同的)
如果積分的兩個點滿足走 d 步後在同一個半圓,那麼它們的貢獻可以一起算,我們只需要根據半圓的奇偶性來減掉圈數乘上週長的積分
∫abcos(Rx)Cdx
若積分區間在同一個圓但不是一個半圓,我們需要二分出半圓的分界點,Code