[题解汇总]二〇二一八月 · 洛谷月赛 · PMOI-4(口胡)
前言 ¶
难道 \(\rm Luogu\) 月赛也要变成 \(\text{Construction Force}\) 了吗?对我这种杂碎来说真的很不友好诶= =.
接下来的题解全是口胡,没有代码验证,如果思路有 \(\rm BUG\) 请务必联系我,阿里嘎多!
T1「PMOI-4」人赢 ¶
最多只会有 \(81\) 种情况(因为出现 \(0\) 就真的是 \(0\) 了),找循环节就行了。
其实矩阵加速加扩展欧拉定理维护最终得到的数的 \(n,m\) 的指数也可以。并且这种方法较为通用.....
T2「PMOI-4」生成树 ¶
对 \(w_i\) 奇偶分类,某一边如果不能恰好分完,就把小的分到另外一边去,说实话可能这道题比 \(\rm T1\) 还水......
T3「PMOI-4」可怜的团主 ¶
找出原树的 \(\rm dfs\) 树,显然叶子之间不存在横叉变,那么叶子构成独立集,判断该独立集大小是否大于等于 \(\udiv{n}{3}\),如果是,那么显然找到答案了,如果否,将叶子按照 \(\rm dfs\) 序排序,并在最后放入一个根,假设叶子有 \(m\) 个,那么现在我们得到一个大小 \(m+1\) 的集合,如果 \(2\nmid (m+1)\) 不能整除,则再放入一个根;
设我们最终得到集合大小为 \(M(2\mid M)\),对于这个集合,将第 \(i\) 个元素与 \(i+\frac{M}{2}\) 个元素匹配构成一条树上路径,这样显然可以将所有节点覆盖到,证明如下:
对于叶子在每个点的分布情况进行讨论:
- 当叶子全部分布在这个点的某个叶子的时候,这个点势必会被某个叶子与根的路径覆盖,所以该方案,无论根是不是叶子,加入一个根节点是必要的;
- 当叶子分布在至少两个儿子中时,由于是 \(i\) 与 \(i+mid\) 匹配,那么不论叶子是如何分布,这种匹配方式一定会存在某它子树中的个叶子和它的匹配节点连成的路径跨出该叶子所在子树,这时该节点亦被覆盖;
类似地,可以用这种方法说明除此构造方案以外,其他的方案都有反例(在某些情况下一些错误的构造方案或许可以使用 \(\tt random\_shuffle()\) 卡过去?)
由于构造输出是 \(\mathcal O(n^2)\) 的,故复杂度就是 \(\mathcal O(n^2)\) 的咯......
T4「PMOI-4」猜排列 ¶
数据范围给予我们十分重要的提示,先看第一组数据:
保证 \(n=4,m_1=4,m_2=1,m_3=4\).
先考虑如何解决该部分:
使用一次 \(2\) 询问,得到 \(\ge 3\) 的数的下标,再使用至多三次 \(1\) 询问(每次询问)即可判断每个数的具体位置。
这种方式启示我们:如果要确定 \([1,n]\) 的数,我们可以通过先确定 \([1,\frac{n}{2}]\) 的数,进而确定 \((\frac{n}{2},n]\) 的数,这进一步启示我们使用倍增,具体地:
- 先使用部分分一的做法确定 \([1,4]\);
- 确定 \((\frac{n}{2},n]\) 时,先使用一次 \(2\) 询问,确定 \((\frac{n}{2},n]\) 的下标集合。
- 使用 \(\frac{n}{2}\) 将下标集合所有元素用 \(1\) 询问做一次,确定 \(n\) 的位置;
- 使用 \(n\) 可以确定其他所有 \((\frac{n}{2},n)\) 的数的位置;
倍增,使用 \(\log_2n\) 次 \(2\) 询问即可解决所有点。并且数据刚好,因为 \(\log_250000\approx 15.60964\),这真的是刚刚好啊= =.
T5「PMOI-4」排列变换 ¶
答案显然为:
推导过程先留个 \(\rm issue\).