Educational Codeforces Round 51 Div. 2

前四題比較水,E題寫出來有BUG最後沒時間調試了,賽後才AC。

A. Vasya And Password

題意

多組輸入,有一個字符串,修改儘可能少的字符使得字符串中包含大寫字母,小寫字母和數字,保證存在修改後滿足要求的字符串。

思路

先掃一遍字符串得到大寫字母,小寫字母和數字的數量。若均大於00,則不修改;若兩種字符的數量大於00,則取其中一種數量大於11的字符,取一位修改爲剩下的字符,這裏必然會有一種字符的數量大於11,否則字符串長度只有22,無法修改得到滿足要求的字符串;若只有一種字符的數量大於00,取兩位分別修改爲剩下的兩種字符。

B. Relatively Prime Pairs

題意

對於從llrr的連續正整數序列,配對,保證每一對正整數的最大公約數爲11

思路

任意相鄰兩個正整數的最大公約數爲11,取相鄰的正整數配對即可。證明如下,對於正整數iii+1i+1,由輾轉相除法得GCD(i+1,i)=GCD(i,1)=1GCD(i+1, i) = GCD(i, 1) = 1

C. Vasya and Multisets

題意

有一個集合,若一個數僅出現了一次,則爲好數。要求將這個集合分成兩個集合,使得兩個集合中好數的數量相等。

思路

若集合中好數的數量爲偶數,則平均分配到兩個集合,其它數均分配到同一個集合;若集合中好數的數量爲奇數,則從其它數中取一個出現次數大於或等於33的數,將其中一個與其餘分別分配到不同的集合,那麼這個數在只有一個被分配到的集合中也是好數,此時可以分配的好數總數量爲偶數,平均分配即可;若集合中好數的數量爲奇數,並且其它數的出現次數均小於33,那麼無法滿足要求。

D. Bicolorings

題意

2×n2 \times n的格子着色,僅能着黑色或白色,問色塊數爲kk的着色方案有多少種。色塊定義如下,若兩個格子顏色相同且相鄰,則屬於同一色塊;若兩個格子顏色相同且所屬色塊相鄰,則屬於同一色塊;否則屬於不同色塊。

思路

考慮動態規劃,記錄前ii列色塊數爲jj的着色方案數,並且對於當前列爲黑黑,黑白,白黑,白白的着色方案數分別計數,即三維動態規劃,
總存儲空間爲O(n×k×4)O(n \times k \times 4)。先確定i=1i = 1時各色塊數對應的着色方案數,然後對於ii11n1n-1jj11kk,下一列着色方案數加上當前列着色方案數,往後更新着色方案數如下:

(當前列着色,下一列着色) 當前列着色方案數 下一列着色方案數
(黑黑,黑黑) dp[i][j][0]dp[i][j][0] dp[i+1][j+0][0]dp[i+1][j+0][0]
(黑黑,黑白) dp[i][j][0]dp[i][j][0] dp[i+1][j+1][1]dp[i+1][j+1][1]
(黑黑,白黑) dp[i][j][0]dp[i][j][0] dp[i+1][j+1][2]dp[i+1][j+1][2]
(黑黑,白白) dp[i][j][0]dp[i][j][0] dp[i+1][j+1][3]dp[i+1][j+1][3]
(黑白,黑黑) dp[i][j][1]dp[i][j][1] dp[i+1][j+0][0]dp[i+1][j+0][0]
(黑白,黑白) dp[i][j][1]dp[i][j][1] dp[i+1][j+0][1]dp[i+1][j+0][1]
(黑白,白黑) dp[i][j][1]dp[i][j][1] dp[i+1][j+2][2]dp[i+1][j+2][2]
(黑白,白白) dp[i][j][1]dp[i][j][1] dp[i+1][j+0][3]dp[i+1][j+0][3]
(白黑,黑黑) dp[i][j][2]dp[i][j][2] dp[i+1][j+0][0]dp[i+1][j+0][0]
(白黑,黑白) dp[i][j][2]dp[i][j][2] dp[i+1][j+2][1]dp[i+1][j+2][1]
(白黑,白黑) dp[i][j][2]dp[i][j][2] dp[i+1][j+0][2]dp[i+1][j+0][2]
(白黑,白白) dp[i][j][2]dp[i][j][2] dp[i+1][j+0][3]dp[i+1][j+0][3]
(白白,黑黑) dp[i][j][3]dp[i][j][3] dp[i+1][j+1][0]dp[i+1][j+1][0]
(白白,黑白) dp[i][j][3]dp[i][j][3] dp[i+1][j+1][1]dp[i+1][j+1][1]
(白白,白黑) dp[i][j][3]dp[i][j][3] dp[i+1][j+1][2]dp[i+1][j+1][2]
(白白,白白) dp[i][j][3]dp[i][j][3] dp[i+1][j+0][3]dp[i+1][j+0][3]

E. Vasya and Big Integers

題意

將一個數劃分成一組數,劃分後的數按順序連接得到原來的數,要求這組數中的每個數都沒有前導零,並且在[l,r][l, r]之間,問劃分方案有多少種。

思路

考慮動態規劃,對於前ii個數和前jj個數的劃分方案,若i<ji \lt j並且從第i+1i+1位到第jj位組成的數滿足條件,則前ii個數的每一個劃分方案分別連接新的數均可以得到一種前jj個數的劃分方案,因此dp[j]=dp[i]dp[j] = \sum dp[i]。對於所有滿足條件的ii可以根據需要連接的數分成三類,若需要連接的數的位數與ll的位數相等,則需要與ll比較判斷是否滿足要求;若需要連接的數的位數與rr的位數相等,則需要與rr比較判斷是否滿足要求;若需要連接的數的位數比ll的位數多,比rr的位數少,則必然滿足要求,並且可以用前綴和優化。需要注意的是,計算前綴和時,記錄空串方案數爲11,並且跳過所有連接前導零的劃分方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章