[OI题解] P10788 [NOI2024] 分数
题解
观察到每一个答案 都存在唯一的回归到 的方式:
若 则回归到 ,否则回归到 ,这种类似欧几里得变换的过程可以将每个 唯一对应一条从 变化而来的路径。
于是我们从 开始可以以搜索树状遍历每个完美分数集合中小于 的分数,且答案仅被遍历一次。 大于 的可以同理统计,时间复杂度 ,可以得到 分。
观察到 不是特别大,考虑时间复杂度就是直接和 相关的做法。
我们考虑形式化这个搜索的过程,该过程形如对二元组 进行 次 后交换 ,那么序列 与每个小于 的完美分数唯一对应。
直接枚举所有 序列太低效了,我们尝试枚举一部分,统计另一部分。
假设现在已经经历了序列 得到了二元组 ,下一步会得到二元组 ,然后接下来每一步都是让 后交换 ,分子分母始终是关于 的一次函数,故我们带着这个一次函数继续搜索下去,这样可以在结束位置是统计 , 的 的个数即可减少一层搜索暴力枚举的时间。
你可以尝试枚举其它位置,统计第一位或者任何某一位,但是无论统计确定的哪一位,几乎不能将状态量减少到可以接受的级别。
于是我们尝试聪明地枚举值较小的位置,统计最大的 可能的取值,这样可以一次统计尽可能多的序列,为我们节省更多的枚举。
经测试,该状态数小于 ,在本题时限下可以接受。
具体实现可以考虑先搜索 并记录其对应的 的最大值,然后尝试在该位钦定为序列 的首个最大值,设其为 ,然后记录 关于 的 的形式,然后统计时可以 统计 且 , 的 即可。
注意剪枝保证复杂度减少无效统计。