2020 07 16 省選B組 模擬

2021-10-08 05:44:30 字數 831 閱讀 6535

t1:這題是一道水題,但是我沒有想出來。

首先發現如果乙個矩陣的(1,1)為1的話,那麼先手可以先把(1,1)翻轉,然後每次後手翻轉另乙個位置的時候,先手就可以翻轉(1,1)。這樣下來先手在這個矩陣是必勝的。反之,如果乙個矩陣的(1,1)是0,那麼先手是必敗的。這樣我們就可以知道乙個矩陣的勝負狀態。然後把所有矩陣的勝負狀態異或起來就是總的勝負狀態了。

t2:這題是乙個矩陣乘法。

首先我們二分答案,設a[i]表示i號房間能走到的最高樓層。現在關鍵就是要求出對於mid的a陣列,然後判斷一下有沒有》=m的就可以了。

而求a的時候要用到矩陣乘法。不過這題不能用普通的矩乘,要優化一下。

首先預處理出乙個陣列:g[d][i][j]表示從i號房到j號房走2^d步能上公升的最大樓層。求g的時間複雜度是n^3*log的。

然後在用g去求二分時的矩陣,這樣的二分時間複雜度就是n^2*log^2的了。

t3:這題還是乙個矩陣乘法。

首先我們要新建k個點,然後原來的i點向新建的j點連out[i][j],而j點向i點連in[i][j],那麼我們發現在n點中走不超過d就等同於在新圖中走不超過2d。並且我們可以從乙個新建的點走到另乙個新建的點,這樣我們就把乙個n*n的矩陣轉化成乙個k*k的矩陣。接下來要做的就是直接矩乘。

不過這題的乙個難點就是要求的是0~d步的矩陣的字首和。下面有一種在快速冪中巧妙求和的方法:

while(w>=1)

g=g*f+g

f=f*f

w/=2;

}

其中s是求字首和矩陣,f是2^i的次冪矩陣,g是1~2^i的矩陣。具體為什麼這樣是對的手推一下就可以了。

至此這題就做完了。

2020 07 27 省選B組 模擬

t1 設f u 表示從u走到根的最小花費。考慮從上往下轉移,當我們要求乙個u的f值時,一定是列舉一種過路劵i,然後從與u的距離小於等於k i 的u的祖先中取min轉移。而取min的過程可以用倍增優化。t2 對於左游標左側和右游標右側的字元我們可以用兩個棧維護,而中間部分則用乙個佇列維護。在翻轉時就對...

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 愉快炸裂。看來是我邊界以及方案數的統計打錯了。對於合併我們有多種可能,等等。係數係數!還有邊界邊界!好多...