訓練日記 20170328

2021-07-29 16:22:25 字數 2293 閱讀 2289

今天的題目似乎很水……?好多人都提前ak離場了,於是提前一小時收題。

但是我還是各種不會。

思維江化???

話說,聽到一句很有趣的話:

山不在高,有林則徐;水不在深,有江……

題意:給定一棵有n(

n≤105

) 個節點的有根樹,編號互不重複。詢問有多少棵子樹內節點編號構成乙個連續區間。

題解:水題,對於每個節點

i ,記錄以該節點為根的子樹中最大和最小節點的編號ma

x(i)

、min

(i)以及子樹的節點個數we

ight

(i) ,若該子樹內節點編號構成連續區間,則ma

x(i)

−min

(i)=

weig

ht(i

)−1 。

開場秒掉一題,開開心心對拍完,然後就開始了噩夢……

題意:對於乙個1∼

n(n≤

1001

) 的排列,定義一種表示方式。若排列中相鄰兩個元素後面乙個大於前面,用

i 表示;若前面大於後面,用

d表示。如排列3,

1,2,

7,4,

6,5 可以表示為di

idid

。現給出乙個長度為n−

1 的排列表示,問有多少種排列滿足這種表示。排列由i、

d、? 組成,

? 表示該位置既可以是

i,也可以是

d 。

題解:考慮動態規劃。用f[

i][j

]表示排列的第

i 位在i∼

n−1位中是第

j 小的數的情況的排列數。若字串的第i−

1位為i ,則f[

i][j

]=σj

k=1f

[i−1

][k]

。d和?

同理。觀察發現該轉移方程可以用字首和優化,實現o(

1)轉移。

似乎很水的一道題,但是考場上完全沒有思路。dp經驗還是不足啊。

題意:給定兩個字串x、

y(1≤

|x|,

|y|≤

1000

) 。令

l 為x和

y 的最長公共子串行長度,詢問

x的所有長為

l 的子串行中,有多少個也是

y的子串行。

題解:再次考慮動態規劃。首先o(

n2) 預處理出dp

陣列,其中dp

[i][

j]表示

x 串長為

i的字首與

y 串長為

j的字首的最長公共子串行長度。轉移方程:dp

[i][

j]={

max(

dp[i

−1][

j−1]

,dp[

i−1]

[j],

dp[i

][j−

1])m

ax(d

p[i−

1][j

],dp

[i][

j−1]

)x[i] = y[j]

x[i]

≠y[j]

(似乎這樣寫很醜……)

接著用d

p 陣列計算

f 陣列。f[

i][j

]表示x 串長為

i的字首中,長度恰好為dp

[i][

j]的子串行,且同時也是

y 串長為

j的字首的子串行的個數。記p[

i]為y

串中第i個字元,在它之前與它相同的字元的最大下標。f[

i][j

]+={

f[i−

1][p

[j]−

1]f[

i−1]

[j−1

]x[i] = y[j],dp[i][j] = dp[i - 1][p[j] - 1] + 1

dp[i][j] = dp[i - 1][j - 1] f

[|x|

][|y

|]即為答案。

思維難度略高於上題……考場上完全想歪了orz。

日常訓練無限墊底,要振作起來啊。

稻花香裡說豐年,聽取wa聲一片。老老實實寫小暴力、對拍!

訓練日記 20161024

初賽好像不會掛了,好開心!版權原因,不上傳題目。題意 求1 n n 1000 的排列中逆序對恰好為 k 個的排列數目。多測。題解 f i j 表示前 i 個數,逆序對個數恰好為 j的排列個數,易得轉移方程f i j i 1k 0f i 1 j k 用字首和優化可使複雜度降為o n2 題意 對於乙個長...

訓練日記 20170324

長久不更新部落格了。期間經歷了恰好被ag線踩的wc,經歷了漫長痛苦的小高考準備。現在終於可以重整旗鼓,向省選進發!幾個月來,唯一不變的是我仍然是個超級蒟蒻 版權原因,不上傳題目。題意 最小樹形圖 去年就接觸 聽說 過的演算法,一直沒有真正寫過。因為各種奇怪的細節錯誤,調了好幾個小時 比如找環時沒有判...

訓練日記 20170419

題意 二維平面上有n n 200,000 個傳送門,第i 個傳送門位於 x i,yi 且可以傳送到以自身位置為左下角,以 a i,bi 為右上角的平行座標軸的矩形中任何乙個其他傳送門。任意選定起點和終點,求從起點傳送到終點的路徑上最多經過多少個傳送門。座標範圍在0 200,000 之間。空間限制51...