#P14547. [IO 2024 #3] 莫图努伊部落的语言

[IO 2024 #3] 莫图努伊部落的语言

题目描述

对我们来说,屏幕上当然显示的是说我们母语的角色,但莫图努伊部落的母语要复杂得多。

该语言总共有 nn 个字母,每个字母对应的声音我们用数字 a1,,ana_1, \ldots, a_n 表示。不同的字母可能对应相同的声音。该语言中恰好有 2n12^n - 1 个单词,每个单词都是这 nn 个字母的任意子序列(单词中字母的顺序与字母表中的顺序一致)。

sis_i 表示按字典序排列的第 ii 个单词的 发音。即取该语言的所有单词,写出每个单词的声音序列,并按升序排列这些序列。这里我们认为单词 xx 小于单词 yy,如果要么 xx 的声音序列是 yy 声音序列的前缀,要么 xx 中第一个不同的声音小于 yy 中对应的声音。

你的任务是找到莫图努伊岛部落语言中发音最小的 kk 个单词。由于这些单词的总长度可能过大,请改为输出这些单词的哈希值,其中单词 s=c1c2cks = \overline{c_1 c_2 \ldots c_k} 的哈希值为

$$h(s) = (a_{c_1} B^{k-1} + a_{c_2} B^{k-2} + \ldots + a_{c_{k-1}} B + a_{c_k}) \bmod M$$

其中 BBMM 是预先给定的参数。

输入格式

第一行输入包含整数 nnkkBBMM——分别表示字母表中的字母数量、你感兴趣的单词数量和哈希参数(1k,n1051 \le k, n \le 10^5k2n1 k \le 2^n - 11B,M1061 \le B, M \le 10^6)。

第二行列出 nn 个整数 aia_i——每个字母的声音编号(1ai1051 \le a_i \le 10^5)。

输出格式

对于按字典序排列最小的 kk 个语言单词,依次输出它们发音的哈希值,每行一个。

2 3 1 5
1 2
1
3
2
3 4 2 3
1 3 1
1
1
0
2
5 6 23 1000
1 2 4 2 3
1
25
25
577
274
578

提示

在第一个样例中,单词的顺序为:1\overline{1}1,2\overline{1,2}2\overline{2}

在第二个样例中,单词的发音为:1\overline{1}1\overline{1}1,3\overline{1,3}1,3,1\overline{1,3,1}3\overline{3}3,1\overline{3,1}


翻译由 DeepSeek V3 完成