Edu CF Round 138 D

D. Counting Arrays
??? 假如我們有一個(gè)序列 a,它的長(zhǎng)度是 n,下標(biāo)是 1 到 n,現(xiàn)在我們可以對(duì) a 中的元素做移除操作,需要滿足的限制是如果我們要移除 ,需要有
。移除一個(gè)元素之后它后面的元素要往前移動(dòng)一格來填補(bǔ)空位。一系列移除操作會(huì)生成一個(gè)序列 b,其中
是第 i 次移除操作移除的元素的下標(biāo)。舉例來說,對(duì)于 a = [1, 1, 2],這個(gè)序列,如果每次都移除第一個(gè)元素,那么產(chǎn)生的 b = [1, 1, 1]. 一個(gè)序列 a 可以有多個(gè)移除序列 b,但是如果它只有唯一的移除序列,那么稱 a 是 unambiguous 的序列,否則是 ambiguous 的序列。
??? 現(xiàn)在給定 n, m (? ),求滿足這樣的條件的 ambiguous 的序列 a 的數(shù)量: a 的長(zhǎng)度是 1 到 n,其中的元素的取值可以是 1 到 m. 最后的答案要模 998244353

思路:
??? 一開始我直接考慮什么樣的序列是 ambiguous 的,發(fā)現(xiàn)有點(diǎn)繞,沒想明白,轉(zhuǎn)而考慮: 什么樣的序列是 unambiguous 的,只需要用總的可能的序列數(shù)減去這個(gè)答案即可。因此問題變?yōu)? 什么樣的序列是 unambiguous 的。
??? 注意到:,因此,對(duì)于任意的序列 a,總是存在等長(zhǎng)度的全為 1 的移除序列 b = [1, 1, 1, ..., 1]。如果一個(gè)序列 a 是 unambiguous 的,那么這個(gè)全 1 的移除序列 b 就是它唯一的移除序列,這要求每個(gè)元素都只能在開頭被刪除?,F(xiàn)在考慮一個(gè)長(zhǎng)為 k 的序列 a,對(duì)于其中的第 i 個(gè)元素,要讓它只能在開頭被刪除,由于不管 a 如何,從開頭刪除元素總是合法的,因此原始的第 i 個(gè)元素
在到達(dá)第一個(gè)元素之前可能處于 2 到 i - 1 的任意一個(gè)位置,需要它在這些位置都不被刪除,也就是
,這要求
能夠被小于等于 i 的所有質(zhì)數(shù)整除,而對(duì)于原始的 i 這個(gè)位置,這樣的數(shù)的個(gè)數(shù)就是
,其中
是小于等于 i 的所有質(zhì)數(shù)。
??? 由于不同位置的 i 之間選數(shù)是獨(dú)立的,而不同長(zhǎng)度的 a 屬于答案的不同情況,因此前者應(yīng)用乘法原理,后者應(yīng)用加法原理。對(duì)于每一種長(zhǎng)度的序列 a,把每個(gè)位置的可能取值數(shù)量撐起來,然后把每種長(zhǎng)度的可能取值加起來,就是所有的 unambiguous 序列的數(shù)量,而所有可能的每個(gè)元素是 1 到 m ,長(zhǎng)度是 1 到 n 的序列 a 的數(shù)量為: ,只需要用前者減去后者即可得到最后的答案。由于數(shù)都很大,具體代碼實(shí)現(xiàn)中關(guān)于模運(yùn)算的細(xì)節(jié)還需要注意。