Atcoder比赛总结
ARC143
B: 可以发现不可能有两个格子同时不合法,会使共用的两个位置大小关系互斥。
直接容斥。
C: 显然先 \(\bmod (X+Y)\) ,然后简单分析结果, \(X>Y\) 的情况 First
和 Second
打反痛失 30 min 。
D: 题意就是最小化不在环内的边数和点数,要求给每条边定向。实际上把 DFS树 建出来就能确定方向了,原因是其中某些边反向不可能使得答案更优。
E: 数学归纳可证有解当且仅当连通块内 W
的个数是奇数个,那么每个可以删得位置一定保证所有相连的块都用偶数个 W
,同时这样删只会使相邻点相连的奇数连通块减一,不会影响其他点的状态,于是能删就删。
F:
ARC142
A: 可能是答案的很少,枚举出来暴力判。
B: 奇偶行交错放。
C: 通过求每个点到 \(1,2\) 的距离和最小值得到距离。
当距离为 \(1\) 是这是错的,考虑求得答案为 \(3\) 是判定是否正确。
一定有且仅有两个距离和为 \(3\) 的点,且这两个点之间距离为 \(1\) 。
D: 状态比较麻烦的树形 DP 。
由于每次只能有一种移动,而移动是可逆的,所以一定是两个状态来回横跳。
这就要求得划分成若干条链,每条链有一个端点不选,其余都选。
手玩一下可以大概发现拼接条件。
设 \(f_{x,0/1/2}\) 为 \(x\) 所在链已经完结,\(x\) 处 01交替
/10交替
/永恒是1
的方案数。
\(g_{x,0/1}\) 为 \(x\) 所在链未完结,且该点最底一点为 \(0/1\) 。
转移还是非常简单的。
\(f_{x,0} \leftarrow \sum g_{son,1} \prod f_{y,1}\) , \(f_{x,1} \leftarrow \sum g_{son,0} \prod f_{y,0}\) , \(f_{x,2} \leftarrow \sum g_{son1,0} g_{son2,1} \prod f_{y,2}\)
\(g\) 的转移有点麻烦就不写了吧(
E: 网络流题,建图学不好 QwQ
先让每个数对中每个 \(a_x\) 至少满足一个 \(b\) ,然后每个数对至多会有一个 \(a_x < b_x\) 的。
将其称之为一类点,其余成为二类点。此时二类点的限制就是没用的了。
现在要决定是 强化一类点 还是 用二类点满足一类点。
注意到值域很小。
将每个二类点的取值写成数轴,每个点都向左连边,若是大于 \(a_i\) 则向 \(T\) 连一条流量为 \(1\) 的边。这样解决二类点的代价。
然后一类点,直接从 \(S\) 连一条 \(b-a\) 的边就好。
F: 比较重要的是第一个转化:设 \(2\) 操作的序列是 \(\{x_{i}\}\) ,贡献就为 \(\sum (x_i - i)\) ,这样 \(1\) 就是没有的了,只关心 \(\sum x_i\) 和操作次数。
转化过后就很好做了。
把各种情况分开处理,固定的直接扔到答案里,把同时影响AB的爆枚,后面的是可以预处理的。
最后复杂度 \(O(n^2)\) 。
ARC135
是不是好久没写了。。。
经典切三题滚粗。
A: 显然的结论是分解只会且一定会分解到只存在 \(2\) 和 \(3\) 的情况(当然 \(4\) 也可以),考虑拆开后的乘积即可证。又知道分解时每层至多只会有两个不同的数,同时维护一下个数即可。
B: 最后三个数是特别的,差分一下得到它们对应前面需要减去的最大值,即可知道三者的下界,多余的随便扔到三个数之一都行。
C: 注意到如果有两次操作,前一次会被后一次抵消,效果等同于只操作一次。
那么对每个位记录改变的增量,每个 \(a_i\) 算一下贡献。
D: 赛时想法是把所有 \(i=1\) ~ \(n-1\) 和 \(j=1\) ~ \(m-1\) 的 \(a_{i,j}\) 全部化成 \(0\) ,最后的边缘另外考虑。
正解是有结论的,其实赛时有一瞬间想到了但是没有认真想下去?
将每个位置按照 \(i+j\) 的奇偶性染色,带上 \((-1)^{i+j}\) 的系数,每次的操作都不会改变行或列的和。
能够得到矩阵 \(B\) 的充分必要条件是
\(A\) 和 \(B\) 对应行的和相同,对应列的和相同。
必要性显然,充分性考虑一列列构造 \(B\) 可以通过数学归纳法得到。
这样问题就简单了,容易看出答案是 \(\max \left( \sum_{i=1}^n |X_i| , \sum_{i=1}^m |Y_i| \right)\) ,其中 \(X_i\) 是第 \(i\) 行的和, \(Y_i\) 是第 \(i\) 列的和。
构造也非常显然,先对每个满足 \(X_i \cdot Y_j >0\) 的 \((i,j)\) ,将绝对值较小一项扔到 \(a_{i,j}\) 里。这样做不会使每行或列的绝对值的和大于和的绝对值。
会剩下一些没有匹配完的数,直接全部扔到第一行或第一列即可。显然这时满足性质的且每行/列的和没有变号。
ARC137
D调不出来好痛苦QwQ
A: 在区间 \(\left[ l,r \right]\) 中寻找差最大的一对互质的数。
\(10^{18}\)内的数质因子最大是 47 ,所以暴力找前50个和后50个的答案就行。
B: 给出一个 0/1 序列,有一次机会可以将其中一段区间翻转( 异或\(1\) ),问最后 \(1\) 的个数有多少种可能的取值。
注意到取值是连续的,找出最多 \(1\) 的和最多 \(0\) 的就可以。
C: A 和 B 博弈,每次可以将序列中最大数变成一个较小的序列中不存在的数,不能动的败,给出初始局面问谁必胜。
观察一下局面,假设 \(a\) 单调,
容易发现 \(a_n > a_{n-1}+1\) 的情况一定优于 \(a_n=a_{n-1}+1\) ,前者可以转移到后者及其所有后继状态,
那么 \(a_n>a_{n-1}+1\) 的局面是必胜的。
由此知任何情况下都不能给对方创造上述局面,所以每一次新加入的数都会 \(< a_{n-1}\) ,也就是说,会将 \([0,a_{n-1}]\) 的区间全部填满,奇偶性判断即可。
D: 给出一个序列,一次操作是对整个序列做一次前缀异或和,问 \(1,2, \cdots , m\) 次操作后末项会是什么。
观察知第一行对每一个末项的贡献是个分形(就是一个三角形三角形不停叠加的样子),那就靠 \(2\) 的幂次维护。
没调出来。。。
ARC130
周末把周日晚的东西都提前补了才过来打。
A: 给出一个字符串,求有多少个位置对,使得分别删去两个位置的两个字符串相同。
连续一串相同字母内的任意两个都合法。
B: 一个 \(W \times H\) 的矩阵,每次操作将某一行或一列染色,求最终状态下每个颜色有多少个格子。
从后往前直接做。
C: 给出两个数 \(a\) , \(b\) ,让你将其重排列,最小化 \(a+b\) 每一位的和。
考虑两数相加进位是有 \(-9\) 的贡献的,如果两数之和为 \(9\) ,但是后面有 \(1\) 进位,也可以有贡献。
那么暴力枚举两个最小位,这里钦定其能进位,由于进位至多为 \(1\) ,所以可以贪心地将能进位的全部靠在最小位,此时能进位的是 \(9\)~\(18\) 。
将这些放完后会有两种情况,一种是两个数都还有剩,这时只能全部求和了。
另一种是一种用完了,那另一个数就能优先把 \(9\) 放完,此时可以去掉所有 \(9\) 的贡献。
这样写 WA 了两发,还一直以为是细节没写对。
后来意识到最后的两种情况可以做点文章。
两个数都还有剩的可以并到第二种,做法是将枚举的最小位往后移,把影响答案的不可能进位数塞到前面。
D: 给出一棵树,要求计算这样的排列数:对于树上的节点,每个和它相邻的节点的对应值要么都小于它,要么都大于它。
一定要注意到是排列不然会打空。(同时说明了手玩数据的必要性)
我们设 \(f_{i,j,0/1}\) 为在 \(i\) 号节点,其子树中有 \(j\) 个 小于 它,它的所有儿子都 小于/大于 它,的方案数。
转移的时候要带上排列数的系数。
E:
题意:有数组长度为 \(n\) 的数组 \(\left\{a_i\right\}\) ,有 \(m\) 次操作,每次操作将 \(a_x+1\) ,保证操作前 \(a_x=\min \left\{a_i\right\}\) ,给出每次的 \(x\) ,求数组初始状态,要求字典序最小。
注意到
1 2 2 1
这样也是可能合法的,操作次序的相对顺序并不一定。
但是容易发现不可能有这样的情况出现:
1 2 2 2 1
于是我们对序列分组,每个组内不能有相同的数,并且后面的组需要包含前面组内的元素。
通过维护每个位置是否可以作为组末即可轻易做到这一点。
最后的一组是特殊的,它不必包含前面组内的元素,因为这组做完后是可以有数组不完全相同的情况出现的。
那么我们分成最后一组是否包含 次数MAX 的数来做,这里推推就好了。
主要是细节要注意。。。99个测试点太难搞了。
ARC059 virtual
可能是打得最好的一次ARC(
切了前三题。
C: 给出一个长度为 \(n\) 的序列,要将序列中所有数改成相同,将 \(x\) 改做 \(y\) 需要代价 \((x-y)^2\) ,问最小代价。
由于 \(n \le 100\) , \(\vert a_i \vert \le 100\) ,暴力碾。
D: 给出一个字符串,求其中一个子串使得长度大于 1 且有超过一半的字符相同。
如果存在一个这样的子串,若是偶数长度,则必有一对相邻字符相同,这对字符就是一个合法串;
若是奇数长度,则必有 \(a_i = a_{i+2}\) 存在,此时这个长度为 3 的串也是合法的。
E: 题意不赘述。
就是最简单的 DP 把所有情况的系数一起转移。
数据范围小把自然数幂和预处理了就好。
F: 每次操作可以在序列末补 0/1 或者删去最后一个字符,问 \(n\) 次操作得到字符串 \(s\) 的方案数。
差一部分没有想到。
容易发现 \(s\) 其实只有长度是有用的。
每两个保留下来的数之间的方案数是卡特兰数。
转移方程一样快速幂求就好。
最后就差第一个保留下来的数前面。
ARC060 virtual
远古题质量没有保证。。。
C 暴力DP。
D 分成小于和大于 \(\sqrt n\) 的,式子写出来就可以直接算。
E ST 表维护。
F 大胆猜结论,除了最小正周期外的点一般都合法,将一些不合法的点判掉就好。