BJOI 2018 解题报告

发布时间 2023-12-31 21:57:43作者: Piggy424008

P4427 [BJOI2018] 求和

谔谔题。这个问题看上去很不可维护,而且让我想到了 P5305 旧词。结果发现怎么 \(k\le50\),那我直接跑 \(50\) 遍不就好了?

P4429 [BJOI2018] 染色

神仙题。考虑先用一些比较简单的情况搞到一些性质继续研究。那我们不妨只对原图黑白染色,得到性质“原图必为二分图”;然后显然每个连通块分开研究是完全可以的,因此只考虑一个连通块即可。

接下来可以从每个点本身开始考虑。笔者最开始考虑的是递推,去探究“假设”删去一个点以后的图和原图的关系。然后我们发现以下几个小性质:

  • 所有的 \(\deg{u}\le1\) 的点均可忽略不计。
  • 一条链或一个偶环必然有解(前者为后者引理)。

想到把图拆成若干个极小的偶环,然后考虑两个偶环相交时的情况。

1.交集为一个点。这个容易证明必不可能,构造一个诱导链就可以了。
2.交集为一条路径。这个情况下会产生一些 \(\deg\ge3\) 的点,而这样的个数万万不能超过两个,否则,任取两个 \(\deg\ge3\)(不妨设就是 \(3\) 吧)的点 \(u, v\),它们的所有路径的交点一旦在除了 \(u, v\) 以外的点相交,会出现两个环相交的尴尬情况。因此 \(\deg\ge3\) 的点不会超过两个。

然后考虑 \(\deg\ge4\) 的点,有了上面的引理,可以发现绝不存在 \(\deg\ge4\) 的点。因此只要满足:

  • 要么不存在 \(\deg\ge3\) 的点;
  • 要么不存在 \(\deg\ge4\) 的点,仅存在两个 \(\deg=3\) 的点,且存在两个同时与他们两个相邻的二度点。

容易在合理的时间复杂度内判定这两个性质。

P4457 [BJOI2018] 治疗之雨

神秘题。预处理出每一轮的所有可能是显然的,然后我们考虑怎么递推求解原式,容易想到的是 \(f[i]\) 从所有 \(i\) 一轮操作可以到的数所转移而来,即 \(1\sim i+1\)。这样我们获得了一个 \(O(n^3)\) 的高消做法。

但是高消太慢了,考虑加速高消。发现 \(f[i]\) 可以用 \(f[i]\) 表示出来,这意味着我们这样表示一遍 \(f[i]\) 以后代入,仅求出 \(f[1]\) 然后再回代。

这样是 \(O(n^2)\) 的。

P4428 [BJOI2018] 二进制

好玩题。题目看上去十分神秘,考虑考察一下他要求的东西,看看有没有什么性质。

首先因为 \(2,3\) 很接近,所以我们打表观察一下 \(2^k\bmod 3\) 的值,经验丰富的人可以直接发现,\(2^k\equiv 1+(k\bmod 2)(\mod 3)\)。那么我就想要知道,能否分配这个段内所有的 \(1\) 让他们对 \(\mod 3\) 有“正确的贡献”。

\(x,y\) 分别为 \(1\) 放在权值为 \(1,-1\) 的位置的个数,容易发现总可以让 \(x=y\)\(x=y+3\),取决于 \(1\) 个数的奇偶性。因此我们可以迅速地求出某个区间是否合法——要么 \(1\) 个数是偶数,要么个数是奇数个,但是 \(x+y=\operatorname{len}-(\operatorname{len} + 1\bmod 2)\)

现在可以快速判定了,怎么快速统计呢?用线段树可以轻易做到,反过来统计 \(0\) 的个数和区间长度的奇偶性即可。

P4458 [BJOI2018] 链上二次求和

傻逼题。出题人,你是不会好好说话吗?

原题其实就是区间加,全局查所有长度在 \([l,r]\) 内的区间,区间内元素和的和。对序列做二阶前缀和,就可以快速询问了。

如何快速修改?朴素的改肯定要炸,但是我们考虑区间加对一阶前缀和相当于加等差数列和区间加,对于二阶前缀和也有式子可推。然后随便线段树维护一下。

P4459 [BJOI2018] 双人猜数游戏

奇妙题。本来以为这个题会有什么比较厉害的结论,结果其实没有。令 \(dp[i][j][k]\) 为说了 \(i-1\) 次不知道后,说话人知不知道 \((j,k)\) 是正确答案。

那么我该怎么确定呢?要么之前就已经确定(\(dp[i-2][j][k]=\operatorname{true}\)),要么上一次可能的区间内只有这一个不知道了(,然后前一个人还不知道),要么上两次可能的区间内只有这一个不知道了,最后就是对方的新增“确定”只有一个数。

这四种分别转移,因为是提交答案(而且数据范围极小),我们可以发现这样做是合理的。按照这样 dp 即可。