2024 Aug
ABC366
[Problem A] Election 2
有 \(N\) 个人投票选举,两位候选人 Takahashi 与 Aoki 分别获得 \(T\) 票与 \(A\) 票,请问此时能否确定谁将赢得选举?
\(0\leq T,A,T+A\leq N\leq 99\),且 \(N\) 为奇数。
设 \(M = \dfrac{N+1}{2}\),则判断 \(T,A\) 是否有一个大于等于 \(M\) 即可。
[Problem B] Vertical Writing
给定 \(N\) 个字符串 \(S_i\),所有字符串用 *
补齐到最长长度,你需要将现在形成的字符矩阵顺时针旋转 \(90\degree\),并删掉旋转后字符矩阵每一行末尾连续的 *
,请问旋转结果?
\(N, |S_i|\leq 100\)
直接求出最长长度,然后下标从 \(N\) 到 \(1\) 扫字符串判断这一位填什么就可以了。
最后用 popback
去一下 *
。
[Problem C] Balls and Bag Query
给定一个袋子,维护 \(Q\) 个操作,分为如下三种:
1 x
,表示往袋子中加入一个编号为 \(x\) 的球。2 x
,表示从袋子中丢掉一个编号为 \(x\) 的球,保证有这么一个球。3
,表示询问袋中的球的编号种类数量。
\(Q\leq 2\times 10^5, 1\leq x\leq 10^6\)
经典题,set
维护答案,直接开个变量也可以,map
维护某个球的数量,直接开个桶也可以,毕竟值域不大。
时间复杂度为 \(\mathcal{O}(Q)\) 或 \(\mathcal{O}(Q\log_2 Q)\)。
[Problem D] Cuboid Sum Query
给定一个三维数组 \(A_{i,j,k}(1\leq i,j,k\leq N)\),给定 \(Q\) 个询问,每次询问给出 \((lx,rx,ly,ry,lz,rz)\),求所有满足 \(lx\leq x\leq rx, ly\leq y\leq ry, lz\leq z\leq rz\) 的 \(A_{x,y,z}\) 的和。
\(N\leq 100, Q\leq 2\times 10^5, A_{i,j,k}\leq 999\)
经典三维前缀和 + 三维差分。
Show 一下我的代码:
sum[i][j][k]=sum[i-1][j][k]+sum[i][j-1][k]+sum[i][j][k-1]-sum[i-1][j-1][k]-sum[i-1][j][k-1]-sum[i][j-1][k-1]+sum[i-1][j-1][k-1]+a[i][j][k];
int ans=sum[rx][ry][rz]-sum[lx-1][ry][rz]-sum[rx][ly-1][rz]-sum[rx][ry][lz-1]+sum[lx-1][ly-1][rz]+sum[lx-1][ry][lz-1]+sum[rx][ly-1][lz-1]-sum[lx-1][ly-1][lz-1];
Haha,一发过。
[Problem E] Manhattan Multifocal Ellipse
给定平面上 \(n\) 个点 \((x_i,y_i)\),求有多少个点 \((x,y)\) 满足该点距给定 \(n\) 个点的曼哈顿距离和不超过 \(D\)。
\(n\leq 2\times 10^5, -10^6\leq x_i,y_i\leq 10^6\)
直接枚举当 \(x=i,y=i\) 时在对应坐标轴上距 \(n\) 个点的距离,然后开个桶存一下,最后答案就是 \(\sum_{0\leq i\leq D} bx_i \sum_{0\leq j\leq D-i} by_j\),前缀和优化即可。
时间复杂度为 \(\mathcal{O}(n\log_2 n + V)\)。
[Problem F] Maximum Composition
给定 \(n\) 个一次函数 \(f_i(x) = a_ix + b_i\),求一个长度为 \(k\) 的正整数序列 \(p\),且 \(p\) 中元素两两不同,使得 \(f_{p_1}(f_{p_2}(\cdots f_{p_k}(1)\cdots))\) 最大。
\(k\leq n\leq 2\times 10^5, k\leq 10, 1\leq a_i,b_i\leq 50\)
首先不可能按照 \(1\sim n\) 的顺序转移,这样不能保证两两不同。
能否找到一种顺序呢?答案是可以,我们用贪心可以证明:
相当于是:
也即:
也就是说你先采用的变换满足 \((a_j-1)b_i\) 尽量小,排序后 DP 即可。
时间复杂度为 \(\mathcal{O}(n\log_2 n + nk)\)。
[Problem G] XOR Neighbors
给定一张无重边无自环的 \(n\) 个点 \(m\) 条边无向图,求是否存在一组点权 \(x_i\),满足对每一个点都有:该点的所有邻居(不含自己)的点权的异或为 \(0\)。
\(n\leq 60\),你的构造需要满足 \(1\leq x_i < 2^{60}\)。
如果不要求 \(x_i > 0\) 则可以用 \(0/1\) 解来构造合法答案,问题是不能取 \(0\)。
但是我们发现,最多 \(60\) 个元,但是我们可以有 \(60\) 组方程组,首先按位考虑,我们可以对每一位都钦定某一个元,该元在该位上的值强制为 \(1\),然后解方程组。
处理很简单,把与这个点 \(u\) 相邻的点 \(v\) 的方程组中,这个点 \(u\) 的系数改为 \(0\),然后要求答案为 \(1\)。
这个可以用高斯消元求出,如果某一次求出方程组无解则必定无解,否则因为每一个元都被钦定某个位为 \(1\),此时显然满足点权限制。
时间复杂度为 \(n\) 轮高斯消元,时间复杂度为 \(\mathcal{O}(n^3 + \frac{n^4}{\omega})\),前面的搞出方程组,后面是求解,然后你还会发现 \(\omega > n\)。