1. 程式人生 > 其它 >一些題(二)

一些題(二)

一些題(二)

[ICPC2014 WF] Surveillance

斷環,然後複製一倍轉化為序列問題,可以倍增。

https://www.luogu.com.cn/record/60927918

[CERC2013] Captain Obvious and the Rabbit-Man

構造多項式 \(A(x)=\prod(x-F_i)\),考慮等式 \(\sum a_iF_iA(F_i)=0\) 的左邊,展開它就做完了。

https://www.luogu.com.cn/record/60939504

[CERC2014] Virus synthesis

\(S\) 有偶迴文子串時,可以先構造它的一半然後用操作 2 補全另一半再用操作 1 補全剩下的。於是在迴文自動機上轉移 dp 即可。

https://www.luogu.com.cn/record/60953431

[NEERC2015] Landscape Improved

列舉最高點在哪裡,然後二分它可以搭多高,判斷時可以用倍增求出他左右兩邊第一個不需要墊的位置。

https://www.luogu.com.cn/record/60979650

[CERC2015] Greenhouse Growth

發現一段連續的相等的 \(h\) 會一起變,可以考慮維護這些連續段。對於兩個相鄰的連續段,可以快速地計算出它們合併的時間。於是按照時間順序依次合併即可,每次合併兩段時注意重新計算它與相鄰段的合併時間。

https://www.luogu.com.cn/record/60988923

[ICPC2015 WF]Qanat

相鄰兩個排土口中點左邊的土都從左出,右邊同理。列出式子來後拉格朗日乘子就好了。

https://www.luogu.com.cn/record/60979549

[ICPC2016 WF] Longest Rivers

計算一個節點時,肯定將它到根的鏈上的邊都給為它,計它此時的長度為 \(l\)。對於不在這條鏈上的節點,貪心地考慮它到它父親的這條邊:如果存在一個兒子流向它的長度已經 \(>l\),就給這個兒子;否則給最短的一個。

考慮計算 \(f_u\) 表示分配完 \(u\) 子樹內以及到父親的邊時 \(u\) 子樹內的最大長度的最小值。將 \(f_u>l\)

的點都染成黑色,那麼該點答案就為黑點連通塊的不在那條鏈上的葉子個數 +1。

於是按照每個葉子的 \(l\) 降序排序,順次將一些點染黑,用樹狀陣列維護下葉子個數即可。

https://www.luogu.com.cn/record/61048238

[CERC2017] Embedding Enumeration

\(f_u\) 表示將 \(u\) 的子樹鋪在網格中且 \(u\) 在左上角的方案數,轉移的話想清楚就不難了。

https://www.luogu.com.cn/record/61053190

[NEERC2015] Binary vs Decimal

發現如果一個數合法,那麼它的字尾也合法,於是可以每次往前加一個 0/1 進行 bfs。答案可以有 160+ 位,需要高精度。

https://www.luogu.com.cn/record/61057069

CF1599F Mars

可以通過區間的和、長度、公差來確定整個等差數列。比較兩個集合大小是否相等可以比較它們 \(k\) 次方和,而一個等差數列的 \(k\) 次方和容易 \(O(k)\) 計算。

https://codeforces.com/contest/1599/submission/133306282

CF1599A Weights

對於一個升序陣列,如果將它左右交替放那麼每放一個天平都會切換。於是設 \(S\)\(k\) 個切換的位置,那麼第一個就放第 \(k+1\) 大的砝碼,接下來每切換一次就放一個更大的在另一邊。不切換時就將較小的 \(n-k\) 個砝碼從大到小,第一個放在第 \(S\) 的第一個字元的另一邊,每放一個就換一邊。容易證明這樣是合法的。

https://codeforces.com/contest/1599/submission/133307766

【集訓隊作業2018】購物

對每個特殊區域,計算從左/上進和右/下出的方案數,相鄰兩個區域和自己區域內部的轉移都可以 FFT,而起點和終點的方案是經典組合數求和問題。

https://uoj.ac/submission/513360