P1048风暴止息(calm)
【题目背景】
环锁开启后,CodeDay 进入风暴核心。维持海域稳定的定风楔已经大面积失稳,残留能量仍在不断改变它们的状态。
核心的控制阵式只能在随机模式与人工接管之间切换。过早接管会超出控制系统能够承受的范围,CodeDay 只能等待局面足够接近稳定,再完成最后的修复。
【题目描述】
风暴核心共有 枚定风楔,依次编号为 。每枚定风楔有稳定与失稳两种状态,分别用 与 表示。目标是使所有定风楔均处于稳定状态。
启动编号为 的控制阵式,会翻转所有编号为 的正约数的定风楔状态。也就是说,稳定状态会变为失稳状态,失稳状态会变为稳定状态。
例如,启动编号为 的控制阵式时,编号为 的定风楔状态会同时翻转,其他定风楔的状态保持不变。
同一个控制阵式可以被启动多次。每次启动后,系统都会根据新的定风楔状态重新判断接下来的行动方式。
对于任意局面,定义其最少操作数为从当前状态出发,使所有定风楔稳定所需的最少控制阵式启动次数。
最少操作数只由当前局面决定,与此前启动过哪些控制阵式无关。当所有定风楔已经稳定时,最少操作数为 。
CodeDay 按照以下方式行动:
- 如果当前局面的最少操作数不超过 ,CodeDay 会选择操作次数最少的方案完成剩余操作。
- 否则,系统会在 中等概率随机选择一个编号,并启动对应的控制阵式。
随机模式下的每次选择彼此独立,同一个编号可能被连续选中。每次随机启动结束后,系统都会重新计算当前局面的最少操作数。
一旦最少操作数不超过 ,CodeDay 便立即接管系统。此后不再进行随机选择,CodeDay 会直接按照操作次数最少的方案使全部定风楔稳定。
如果初始局面的最少操作数已经不超过 ,CodeDay 会从一开始就直接接管,不会执行任何随机操作。如果随机操作使局面第一次满足接管条件,则该次随机操作仍计入总操作次数。
所有可能的随机过程共同决定最终操作次数。请你求按照上述方式使所有定风楔稳定所需操作次数的期望。
可以证明,这个期望乘以 后一定为整数。你只需要输出该整数对 取模的结果。
【输入格式】
从文件 中读入数据。
本题包含多组测试数据。
输入的第一行包含两个非负整数 ,分别表示测试点编号与测试数据的组数。 表示该测试点为样例。
对于每组测试数据:
第一行包含两个整数 。
第二行包含 个整数,第 个整数表示编号为 的定风楔初始状态。
【输出格式】
输出到文件 中。
对于每组测试数据输出一行一个整数,表示所求期望乘以 后对 取模的结果。
【样例 1 输入】
0 44 00 0 0 03 31 0 12 01 03 10 1 1【样例 1 输出】
06618【说明/提示】
【样例 1 解释】
第一组测试数据中,所有定风楔已经稳定,因此答案为 。
第二组测试数据的最少操作数为 ,不超过 。操作次数乘以 等于 。
第三组测试数据中,完成操作所需次数的期望为 。将其乘以 后得到 。
【样例 2】
见选手目录下的 和 。
该组样例符合测试点 的数据范围。
【样例 3】
见选手目录下的 和 。
该组样例符合测试点 的数据范围。
【样例 4】
见选手目录下的 和 。
该组样例符合测试点 的数据范围。
【样例 5】
见选手目录下的 和 。
该组样例符合测试点 的数据范围。
【样例 6】
见选手目录下的 和 。
该组样例符合测试点 的数据范围。
【数据范围】
对于 的数据,保证 ,,,单个测试点内 ,每枚定风楔的状态均为 或 。
| 测试点编号 | 特殊性质 | |
|---|---|---|
| 无 | ||
| 无 | ||
| 无 | ||
| 是 | ||
| 无 |
特殊性质:保证每组测试数据初始局面的最少操作数不超过 。
【题解】
已公开 1 篇题解,官方题解会优先显示。