2020 11 22 模擬賽1 題解

2022-07-09 03:48:12 字數 2691 閱讀 5586

題目描述

有\(n\)條木板,從上到下依次擺放,其中第\(i\)條木板的水平長度等於正整數\(a_i\),高度等於\(1\)。這些木板按左端對齊,並且第i 條的下邊界緊貼著第\(i+1\)條的上邊界。

現在請你粉刷這\(n\)條的木板。你只有乙個寬度為\(1\)的刷子,每次可以水平或者豎直地對連續的位置進行粉刷,但是刷子不能經過沒有木板的位置。

現在允許同乙個位置被多次粉刷。你希望通過最少的粉刷次數完成這\(n\)條木板的粉刷(即使得每塊木板的每個位置都被刷到至少一次)。

這種情況下需要刷至少5下。

題解

全部橫著刷最多需要\(n\)次,因此考慮用豎直刷來減少橫著刷的次數。如果豎直刷,一定先考慮最左邊的列。

如果一行被豎直操作完全覆蓋,那就沒有必要刷這一行了。

\(f[i][j]\)表示染前\(i\)行,還有\(j\)個豎直操作可以往下延伸的最少操作次數(因為如果中間有短的一行那可能就有無法延伸的數值操作。複雜度\(o(n^2)\)。

假設已經完成了\(f[i][j]\)的計算,考慮\(a[i+1]\)。

\(j。即之前可以延伸的還沒有完全能把這一行完全覆蓋,因此後面的部分需要額外覆蓋。可以使用一次橫著或者全部豎直來覆蓋這一部分。\(f[i+1][a[i+1]]=f[i][j]+a[i+1]-j,f[i+1][j]=f[i+1][j]+1\).

\(j=a[i+1]\)。那麼就完全不需要額外覆蓋,\(f[i+1][j]=f[i][j]\)。

\(j>a[i+1]\)。那麼就是說這一行阻斷了豎直方向的覆蓋,所以\(f[i+1][a[i+1]]=f[i][j]\)。

題目描述

你有\(n\)根火柴棍,並用它們擺出乙個\(k\)位的正整數,且要求恰好把所有火柴棍都用完。這裡\(k\ge1\),且這個\(k\)位正整數不可以包含前導零。每個數字的形狀如下圖所示。

令\(x_1,x_2,\dots,x_m\)表示所有可以擺出的\(k\)位正整數。給定非負整數\(d\),你需要輸出:

\[\sum_^x_i^d\mod 10^9+7

\]題解

\(f[i][j]\)表示\(i\)個火柴表示\(j\)位數的\(0\)次方和;

\(g[i][j]\)表示\(i\)個火柴表示\(j\)位數的\(1\)次方和;

\(h[i][j]\)表示\(i\)個火柴表示\(j\)位數的\(2\)次方和。

對於\(2\)次方和每次多加一位時,只需要用完全平方展開即可轉移。

用dp可以簡單地解決。為了防止爆空間,可以考慮用滾動陣列。

同時要關注首位非0的問題。

記數字\(x\)需要的火柴數為\(d[x]\),\(t[i]=(i==0)\),則有轉移方程:

\[\begin

f[i][j]&=\sum_\\

g[i][j]&=\sum_\\

h[i][j]&=\sum_(x\cdot t[j-1])^2\cdot f[i-d[x]][j-1]

\end

\]拓展:使用二次項展開可以拓展到\(d\le10\)的情況。

題目描述

有乙個特殊的撲克遊戲,算分規則是這樣的:

• 先把\(n\)張牌放在桌上,每張牌編號\(1\sim n\)。每張牌都有兩面,一面點數為\(a_i\),另一面點數為\(b_i\),一開始寫著\(a_i\)的面作為正面朝上。

• 接下來依次進行\(k\)輪操作,每次把所有朝上面點數\(\le t_j\)的牌翻面。

• 所有操作完成後,計算所有牌朝上面點數之和\(sum\)。

你需要輸出最終的總分\(sum\)。

題解

令較大的為\(b[i]\),較小的為\(a[i]\),即\(\forall i\in[1,n]\),有\(a[i]\le b[i]\)。

對於乙個\(t\),討論三個情況:

\(t。無論是哪面朝上,都不會有任何影響。

\(t\ge b[i]\)。無論是哪面朝上,都會被翻轉。

\(a[i]\le t< b[i]\)。如果原來是\(b[i]\),不會被翻轉;如果原來是\(a[i]\),一定被翻轉。因此可以理解為翻轉成為\(b[i]\).

因此,對於每張牌,找到最後乙個第\(3\)類操作。然後從此往後尋找第\(2\)類操作的個數,如果是奇數次,則\(a[i]\)朝上;反之\(b[i]\)朝上。

可以考慮整個解題過程為兩個步驟:

對每個\(i\),找到\(max\\),使得\(a[i]\le t[j]。

找到\(j'\)的個數,使得\(j'>j\)且\(t[j']\ge b[i]\)。

因此可以把原題轉換為普通的資料結構題。

建立線段樹\(s\),對所有的\(t[j]\),在\(t[j]\)的位置上插入\(j\),每次在區間\([a[i],b[i]-1]\)上查詢最大的\(j\)。這樣就完成了第一步的查詢。(也可以用st表)

等同於在平面直角座標系中,對乙個點,詢問其右上角的點數有多少:二維偏序。

只要離線做法,因此依次掃瞄並加入乙個bit中,當詢問時即回答已經計入bit(即在其上方)的、位置在詢問點右邊的個數。

題解 模擬賽11 26 T1

很容易就能得到每跳一步就是從黑到白或白到黑 所以如果起點和終點全白或全黑,肯定no 如果起點和終點一黑一白,肯定yes 然後我就錯掉了,因為我沒有注意到有可能起點到不了終點 這種情況只會在棋盤較小的情況下出現 所以我用寬搜判斷了一下 code include define maxn 100010 u...

模擬賽 circle 題解

題意 有n個數,問有多少個x,x leq t 滿足這n個數分別 x後,異或和為s。每個數小於 2 m 數字dp。由於是加法,需要記錄進製,因此從低位到高位dp。只要記錄下有幾個進製,就可以根據這n的數的大小知道究竟是哪幾個進製了。設 dp i,j,0 1 表示考慮到第i位,有j個進製,與t的大小關係...

模擬賽2 題解

這次模擬賽最後一道是提答題,就不寫題解了。orz這題 emmm,我無話可說。小範圍記憶化,大範圍遞迴求解 複雜度 o k sqrt 記 f i,j 表示前 j 個數中不被 a i,a dots,a n 整除的個數,答案即為 f 1,n 狀態轉移方程為 f i,j f i 1,j f i 1,j a ...