10.8 CSP-S 模拟赛
为什么我如此之唐?
T1 string
用任意方法求出 LIS 长度答案就是原长减去 LIS 长度。
因为不会朴素求法写了树状数组 /ll
T2 meeting
神秘小二分。
考虑二分花费的时间,每个人的可到达位置会在一个区间内 \([x - vt, x + vt]\),那么取交集看是否存在交集 check 即可。
T3 travel
你注意到一个强联通分量中一定是可以回到起点,那么反边只需要建在两个强联通分量之间,幸运的是,暴力的 \(O(mn+m^2)\) 成功通过了(
T4 discover
你注意到 \(n\) 的范围十分的大,考虑直接从 \(T\) 下手。
考虑枚举危险点来确定最大可确定的长方形,确定了长方形那么最大的正方形也随之确定。
\(O(T^2)\) 枚举左右两边的危险点,\(O(T)\) 枚举在这个横坐标区间内的危险点确定上下边界。即高处点纵坐标最小值到低处点纵坐标最大值的范围。
没有那么多点该怎么办呢?比如只有两个点。
翻个 90 度再做一遍(
只有一个点怎么办呢?
把边界当做危险点加进去即可。
T5 xor
你发现他是一个底层 \(n\) 个 \(a_i\) 的三角形一层一层相邻两个异或上去,那么对于 \((x,y)\) 上的数一定可以表示成 \(\oplus_{i=1}^{n}{a_i^{k_i}}\),那么我们只需要知道 \(a_i\) 被异或的次数即可。这个异或的次数就是 \((0,i)\) 这个点到 \((x,y)\) 的路径总数,是可以拿组合数算的,你发现影响路径数的就是其右转的次数,总共最多只有 \(x\) 次右转,对于第 \(i\) 个最多可以转 \(i - y\) 次,路径数即为 \(\binom{x}{i-y}\)。
根据异或的性质,我们其实只需要知道异或次数的奇偶性即 \(\binom{x}{i-y} \bmod 2\),其等价于 \([x \enspace \& \enspace (i - y) = (i - y)]\),直接枚举 \(x\) 子集即可,期望得分 40,因为是随机数据所以可以过,复杂度 \(E(2^{\operatorname{popcount(x)}}) \times q\)。
正确复杂度的做法。考虑一般化从 \((t,i)\) 计算 \((x,y)\),那么异或次数会变成 \(\binom{x - t}{i - y}\),复杂度可得 \(2^{\operatorname{popcount(x - t)}} \times q + nt\),考虑平衡两部分,不妨设 \(t = x \bmod 2^p\),你发现这样清空了 \(x\) 的后 \(p - 1\) 位以优化第一部分,因为 \(x\) 差不多 20 位,那么取到一个恰好的 \(p\) 可以优化到根号级别,并且只要 \(2^p\) 不大,\(nt\) 也不会太大,所以考虑取 \(p = 9\),这样差不多是 \(O(n\sqrt{n} + q\sqrt{n})\) 的复杂度。那么我们只需要预处理前 512 行的数即可,之后枚举 \(x - t\) 子集暴力推就行。

浙公网安备 33010602011771号