2020 07 27 省選B組 模擬

2021-10-08 14:25:44 字數 894 閱讀 6131

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

2020 07 16 省選B組 模擬

t1 這題是一道水題,但是我沒有想出來。首先發現如果乙個矩陣的 1,1 為1的話,那麼先手可以先把 1,1 翻轉,然後每次後手翻轉另乙個位置的時候,先手就可以翻轉 1,1 這樣下來先手在這個矩陣是必勝的。反之,如果乙個矩陣的 1,1 是0,那麼先手是必敗的。這樣我們就可以知道乙個矩陣的勝負狀態。然後...

2020 08 12 省選B組 模擬 總結

估分 100 30 30 30 190 考場 100 30 20 0 150 看來我的暴力水平還是不咋地。看完題,點分治就直接上了。發現每一位互不影響,所以在看經過 rt 的路徑時儲存一下有該位的個數,然後乘加到答案即可。由於同乙個子樹會算多,所以在子樹減去即可。正解樹形 dp 對於每一位直接 dp...

2020 08 08 省選B組 模擬 總結

估分 20 30 30 80 考場 0 50 60 110 奇奇怪怪的分數出現了。t1 由於沒有刪除輸出方案數的那一行,愉快爆零。考場瞎搞全排列,發現只與相對位置有關。於是嘗試 o n 4 dp 愉快炸裂。看來是我邊界以及方案數的統計打錯了。對於合併我們有多種可能,等等。係數係數!還有邊界邊界!好多...