1. 程式人生 > >bzoj 5191~5193 口胡題解

bzoj 5191~5193 口胡題解

前言

除了5193,我都沒有打。。
口胡題解嘛。。
就是口胡

5191: [Usaco2018 Feb]Slingshot

這個的話,因為只能用一次
其實我們只有四種情況
下文L,R表示出發點,Li,Ri表示彈弓,—->表示在數軸上面的先後順序
第一種情況:
L>Li>Ri>R
這個要滿足的條件是R>=RiL<=Li
式子就是(RRi)+(LiL)+Ci
顯然可以按L從大到小排序,維護線段樹維護某一段區間裡面

Ri+Li+Ci的最小值即可

第二種情況
Li>L>Ri>R
這個要滿足的條件是R>=RiL>=Li
式子就是(RRi)+(LLi)+Ci
顯然可以按L從小到大排序,維護線段樹維護某一段區間裡面RiLi+Ci的最小值即可

剩下兩個不寫了,也是一樣的套路,都是先用排序解決一個條件,線段樹解決另外一個加上維護

時間複雜度O(nlogn)

5192: [Usaco2018 Feb]New Barns

這題顯然最後是一棵樹啊
由於是離線
我們可以吧樹先建出來
考慮樹剖
考慮距離dep[x]+dep[y]2dep[LCA]
第一個對於詢問是常量,我們要找的是dep[y]2dep[LCA]的最大值
樹剖每個節點維護輕兒子裡面這個東西的最大值就可以了
每跳過一條輕鏈就暴力查詢一下
每一次修改也是跳輕鏈暴力修改一下就可以了

時間複雜度O(nlog2n)

5193: [Usaco2018 Feb]Cow Gymnasts

這題做了一個晚上。。
感覺藥丸。。
我們要證明一個結論,就是填的數極差不會超過1
嘎打表找規律,先%
這個的話,胡亂證一下(霧)
突破口就是迴圈啊
考慮,最大值是m
那麼可以得到,

g=gcd(m,n)
可以得到這個迴圈是以g為迴圈節的
然後列舉g就可以亂搞了