A85959.「WC2020」猜数游戏
NOI/NOI+/CTSC
通过率:0%
时间限制:2.00s
内存限制:128MB
题目描述
黑板上写有 n 个互不相等且都小于 p 的正整数 a1,a2,⋯,an。小 J 想用这些数字和小 M 玩一个猜数游戏。
游戏规则十分简单:游戏开始时,小 J 会从这些数字中随机选择若干个让小 M 来猜,而小 M 则可以通过若干次询问来确定小 J 选择了哪些数字。
每一次询问的模式如下:小 M 可以任意指定一个数字 ak,若它是小 J 所选择的数字之一,则小 J 会告诉小 M 他所选择的数字中所有能表示成 (ak)mmodp 的数,其中 m 是任意正整数,mod 表示求二者做带余除法后的余数。反之,若 ak 没有被小 J 选中,则小 J 只会告诉小 M ak 没有被选中。
游戏会在小 M 确定小 J 所选中的所有数字后立刻结束。
例如,若 n=4,p=7,数字 {an} 按下标顺序依次为 {1,3,4,6},小 J 选定的数字为 {1,4,6},一种可能的游戏进行的过程(并非是最优过程)如下:
| 小 M 的询问 | 小 J 的反馈 |
|---|---|
| a2=3 | a2 没有被选中 |
| a4=6 | 6(=61mod7),1(=62mod7) |
| a3=4 | 4(=41mod7),1(=43mod7) |
3 次询问后小 J 所选出的所有数都已被小 M 确定,游戏结束。
小 M 还有作业没有写完,因此他需要对游戏进行的时间进行评估。他想知道为了使游戏结束,他所需要做出询问的最小次数的期望 S 是多少。
为了避免精度误差,你需要输出答案乘 (2n−1) 后模 998244353 的余数。在本题中,你可以认为小 J 每次在选数时会在集合 {a1,a2,⋯,an} 的全部非空子集中等概率地选择一个,在这个前提下可以证明 (2n−1)×S 一定是一个整数。
输入格式
第一行两个正整数 n 和 p。
第二行 n 个正整数,依次表示 a1,a2,⋯,an。
输出格式
仅一行一个整数表示答案。
输入输出样例
输入#1
4 7 1 3 4 6
输出#1
17
输入#2
8 9 1 2 3 4 5 6 7 8
输出#2
532
说明/提示
对于所有测试点:1≤n≤5000,3≤p≤108,1≤ai<p (1≤i≤n) 且 ai 两两不同。
对于所有编号为奇数的测试点,保证 p 是一个素数;对于所有编号为偶数的测试点,保证存在奇素数 q 和正整数 k>1 使得 p=qk。
| 测试点编号 | n≤ | p≤ | 特殊性质 | 测试点编号 | n≤ | q≤ | 特殊性质 |
|---|---|---|---|---|---|---|---|
| 1 | 10 | 100 | 无 | 2 | 10 | 100 | 无 |
| 3 | 10 | 100 | 无 | 4 | 10 | 100 | 无 |
| 5 | 200 | 5000 | 无 | 6 | 200 | 5000 | 无 |
| 7 | 300 | 106 | 无 | 8 | 300 | 106 | 无 |
| 9 | 300 | 106 | A | 10 | 300 | 106 | B |
| 11 | 5000 | 107 | A | 12 | 5000 | 107 | 无 |
| 13 | 5000 | 107 | 无 | 14 | 5000 | 107 | 无 |
| 15 | 5000 | 108 | A | 16 | 5000 | 108 | B |
| 17 | 5000 | 108 | 无 | 18 | 5000 | 108 | 无 |
| 19 | 5000 | 108 | 无 | 20 | 5000 | 108 | 无 |
特殊性质 A:在模 p 意义下 3i (1≤i≤p−1) 两两不同余。
特殊性质 B:对所有的 1≤i≤n 都有 (ai,p)>1。