版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
title: "题解 - [Luogu P2150] [NOI2015] 寿司晚宴" categories:
为了庆祝 NOI 的成功开幕, 主办方为大家准备了一场寿司晚宴. 小 G 和小 W 作为参加 NOI 的选手, 也被邀请参加了寿司晚宴
在晚宴上, 主办方为大家提供了 $n−1$ 种不同的寿司, 编号 $1,2,3,\ldots,n-1$, 其中第 $i$ 种寿司的美味度为 $i+1$. (即寿司的美味度为从 $2$ 到 $n$)
现在小 G 和小 W 希望每人选一些寿司种类来品尝, 他们规定一种品尝方案为不和谐的当且仅当: 小 G 品尝的寿司种类中存在一种美味度为 $x$ 的寿司, 小 W 品尝的寿司中存在一种美味度为 $y$ 的寿司, 而 $x$ 与 $y$ 不互质
现在小 G 和小 W 希望统计一共有多少种和谐的品尝寿司的方案 (对给定的正整数 $p$ 取模). 注意一个人可以不吃任何寿司
输入文件的第 $1$ 行包含 $2$ 个正整数 $n, p$ 中间用单个空格隔开, 表示共有 $n$ 种寿司, 最终和谐的方案数要对 $p$ 取模
输出一行包含 $1$ 个整数, 表示所求的方案模 $p$ 的结果
3 10000
9
4 10000
21
100 100000000
3107203
【数据范围】
<table style="undefined;table-layout: fixed; width: 450px"> <colgroup> <col style="width: 100px"> <col style="width: 150px"> <col style="width: 200px"> </colgroup> <thead> <tr> <th>测试点编号</th> <th>n 的规模</th> <th>约定</th> </tr> </thead> <tbody> <tr> <td>1</td> <td rowspan="3">2 ≤ n ≤ 30<br></td> <td rowspan="10">0 < p ≤ 1,000,000,000</td> </tr> <tr> <td>2</td> </tr> <tr> <td>3</td> </tr> <tr> <td>4</td> <td rowspan="2">2 ≤ n ≤ 100</td> </tr> <tr> <td>5</td> </tr> <tr> <td>6</td> <td rowspan="2">2 ≤ n ≤ 200</td> </tr> <tr> <td>7</td> </tr> <tr> <td>8</td> <td rowspan="3">2 ≤ n ≤ 500</td> </tr> <tr> <td>9</td> </tr> <tr> <td>10</td> </tr> </tbody> </table>显然方案合法的充要条件是二人选的质因数集合交集为空
当 $n\leq 30$ 时, 状压 DP 的做法不难得出:
设
则转移方式如下:
答案为
$$ \sum_{S_1,S_2\in P; S_1\cap S_2=\varnothing}f_n(S_1,S_2) $$
这个 $f$ 可以滚动数组优化, 时间复杂度为 $O(n4^{\pi(n)})$
对于本题的数据范围来说, $\pi(500)=95$, 显然不能直接状压
但是我们不难发现: 任意不超过 $n$ 的数只能有至多一个大于 $\sqrt{n}$ 的质因子
所以我们可以这样优化:
设
先将 $a$ 按 $b$ 升序排序
则转移方式如下:
在 $b_i$ 变动或到最后一个数时做如下转移
答案为
$$ \sum_{S_1,S_2\in P; S_1\cap S_2=\varnothing}f_n(S_1,S_2) $$
$O(n4^{\pi(\sqrt{n})})$