哈哈,最近經常被吊打,感覺都習慣了。。。不太好(認真)
好多演算法都沒有學習,要多補補了。
估分:\(20 + 0 + 10 + 30 = 60\)
考場:\(20 + 0 + 25 + 30 = 85\)
沒有一道切了的。。。
哈哈,其實\(t3\)理解起來還是有點難的(流汗),畢竟我想了好久。
主要是\(∑a[i]^2\)這個東西怎麼算,我們有個通用(大霧)套路:轉化成兩個人走相同路徑(即走的路的地形相同)的方案數
這樣我們可以考慮記憶化+爆搜+剪枝。
我們首先列舉兩人的路徑方向(左上,左下,右上,右下),而由於會有重,所以要容斥減去(左,右,上,下)
記憶化+爆搜
我們設\(f[i][j][k][l]\)表示以\((i,j)\),\((k,l)\)為起點時的方案數。
則可以直接列舉方向判斷是否與列舉的方向相同(左上時左也可以,所以才要列舉),然後遞迴進去處理下一層並返回即可。
剪枝設\(g[x1][y1][x2][y2]\)表示這兩個人兩種方向分別為\((x1,y1)\),\((x2,y2)\)的方案數。
顯然其實\(g[x1][y1][x2][y2]=g[x2][y2][x1][y1]\),因為兩個人換一下位置方案數不變。
而且\(g[x1][y1][x2][y2]=g[-x1][-y1][-x2][-y2]\),假設第乙個人從\((a1,b1)\)走到\((a2,b2)\)那個從\((a2,b2)走到\)(a1,b1)$也可以是一種方案,而方向相反。
所以可以剪枝掉很多。
然後這題就切了。(微笑)
沒想到我竟然先改\(t4\)。。。
對於答案,我們可以搞搞搞,最後搞出來乙個:
\[ans = ∑_^c(i,a+b)=∑_^c(i,a+b)
\]所以我們可以發現:$$ans = (2+∑_c(i,a+b))/2$$
由於\(a-b<=10000\),所以我們可以暴力求出右邊的東西。
現在的問題就是如何求\(c(n,m)%10^10\),我們可以用擴充套件lucas定理來搞。
具體看碼吧。
演算法學習不夠到位。
而且有些方法根本沒有想到:
乙個無根樹讓你求路徑最大值,沒有想到點分治。。。
還有一些部分分什麼的,都不會打【慘】
(╥╯^╰╥)
2020 07 16 省選B組 模擬
t1 這題是一道水題,但是我沒有想出來。首先發現如果乙個矩陣的 1,1 為1的話,那麼先手可以先把 1,1 翻轉,然後每次後手翻轉另乙個位置的時候,先手就可以翻轉 1,1 這樣下來先手在這個矩陣是必勝的。反之,如果乙個矩陣的 1,1 是0,那麼先手是必敗的。這樣我們就可以知道乙個矩陣的勝負狀態。然後...
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...