t1:設f[u]表示從u走到根的最小花費。考慮從上往下轉移,當我們要求乙個u的f值時,一定是列舉一種過路劵i,然後從與u的距離小於等於k[i]的u的祖先中取min轉移。而取min的過程可以用倍增優化。
t2:對於左游標左側和右游標右側的字元我們可以用兩個棧維護,而中間部分則用乙個佇列維護。在翻轉時就對中間的佇列打標記,而其他操作推一下就好了。
t3:首先觀察式子l-(t-t)^2,(l,t<=10^5)發現當兩份作業的t只差小於sqrt(10^5)時l是不起作用的。於是我們先按照t、l和編號排序,然後將t相同的放入同乙個棧中。每次就只列舉sqrt(10^5)範圍內的t,然後在每個t的棧頂中選取最小值。
注意(t-t)^2會爆long long,所以我們要通過類似於斜率優化的方法,通過比較斜率來取最小值。
t4:設f[i][j]表示a用到第i位,b用到第j位時的方案數。
若a[i+1]!=b[j+1],那麼f[i][j]自然可以轉移到f[i+1][j]和f[i][j+1]。
但是如果a[i+1]=b[j+1],那麼情況比較複雜。通過進一步分析,我們發現其實我們需要找出從i和j開始連續的一段a等於b的。在加入這兩端時我們可以強制每一時刻a的這一段的加入的數量都要比b多,這樣可以不算重。接著我們可以假設這一段的長度為s,當a的這一段全部加完時b加了k位,那麼就相當於乙個包括s個左括號和k個右括號的合法括號序列的方案數,這個可以預處理出來(設為g[s][k])。接下來我們就可以從f[i][j]*g[s][k]轉移到f[i+s+1][j+k]。b在a之前加完同理。最終答案等於f[n][n]+f[n][n+1],因為我們還要統計a和b最後的若干位相同的情況。
下面講一下g的求法。我們可以把問題轉化成二維平面上的問題:即從(0,0)走到(i,j),不能走到i t1 這題是一道水題,但是我沒有想出來。首先發現如果乙個矩陣的 1,1 為1的話,那麼先手可以先把 1,1 翻轉,然後每次後手翻轉另乙個位置的時候,先手就可以翻轉 1,1 這樣下來先手在這個矩陣是必勝的。反之,如果乙個矩陣的 1,1 是0,那麼先手是必敗的。這樣我們就可以知道乙個矩陣的勝負狀態。然後... 估分 100 30 30 30 190 考場 100 30 20 0 150 看來我的暴力水平還是不咋地。看完題,點分治就直接上了。發現每一位互不影響,所以在看經過 rt 的路徑時儲存一下有該位的個數,然後乘加到答案即可。由於同乙個子樹會算多,所以在子樹減去即可。正解樹形 dp 對於每一位直接 dp... 估分 20 30 30 80 考場 0 50 60 110 奇奇怪怪的分數出現了。t1 由於沒有刪除輸出方案數的那一行,愉快爆零。考場瞎搞全排列,發現只與相對位置有關。於是嘗試 o n 4 dp 愉快炸裂。看來是我邊界以及方案數的統計打錯了。對於合併我們有多種可能,等等。係數係數!還有邊界邊界!好多...2020 07 16 省選B組 模擬
2020 08 12 省選B組 模擬 總結
2020 08 08 省選B組 模擬 總結