9.28
突然发现自己之前一场 ARC ,评分分别为 1110 和 1049 的 A 和 B ,赛时一点思路没有。
然后打开了几道 AGC 评分 2000 左右的 A 和 B,结果发现自己连 1701 的 A 题都觉得很困难。
然后为今晚打 ABC 光荣 rk1468 埋下伏笔。
我承认 \(99\%\) 都是看的题解。
agc066_a
给网格进行黑白染色,让其中一种点 \(\mod2d\equiv d\) 另一种 \(\mod2d\equiv0\) ,或者反过来,因为这两种方案代价总和为 \(dn^2\) ,所以一定有一种方式代价 \(\le\frac{1}{2}dn^2\)
agc067_a
我觉得这个挺难的啊,在补图上团就是独立集了,然后问题就变成补图任意导出子图都存在点数不少于一半的独立集,发现不合法的情况当且仅当补图存在奇环,也就是说如果补图是二分图,那么就一定合法,然后用并查集判断一下是不是二分图就好,补图边数 \(\frac{n(n-1)}{2}-m\) 如果 \(>\frac{n^2}{4}\) 那么就不合法了,然后这么先判一下,这样复杂度就保证了。
agc065_a
原式可变为 \(a_n-a_1+pk\),其中 \(p\) 是满足 \(a_i > a_{i+1}(1 \le i \le n-1)\) 的下标 \(i\) 数量。显然若 \(c\) 是 \(p\) 能取到的最大值,只有 \(p \ge c-1\) 时才能产生最优解,像我只能想到倒序排序,然后发现如果有相同的数不一定行,于是找出出现次数最多的数,设出现次数为 \(m\),分别考虑分成 \(m\) 组和 \(m-1\) 组。
\(m\) 组的贡献是确定的,即出现了 \(m\) 次里的数字的最小值 \(x_1\),减去出现了 \(m\) 次里的数字的最大值 \(x_2\),此时答案即是 \(ck + x_1 - x_2\)
\(m+1\) 组贪心的把出现次数小于 \(m\) 的都放在中间,剩下的考虑扔到最左边还是最右边,我们贪心的想右边最小值减左边最大值最大,所以我们可以定一个阈值 \(x\),大于 \(x\) 的不放在第一组,小于等于 \(x\) 的不放在最后一组。那么,此时的答案是 出现 \(m\) 次且大于 \(x\) 的最小值 减去 出现 \(m\) 次且小于等于 \(x\) 的最大值。排序出现 \(m\) 次里的数字,枚举相邻项的差即可。设差是 \(d\),答案是 \(d + (c-1)k\)
agc065_b
正着想很难想,同时我们发现操作是可逆的,于是我们可以对 \(P\) 操作,每次从 \(P\) 中删去 \(i\) 再插入 \(i\) ,\(i\) 依次从 \(n\) 到 \(1\) ,考虑操作 \(i\) 时,\(i+1\) 为 \([i+1,n]\) 中位置最小的,而 \([1,i]\) 还没动过,所以可以根据 \(i+1\) 的位置浅判一下 \(i\) 当前在 \(i+1\) 的左侧还是右侧。
设 \(dp_{i,j}\) 为 \(i\) 插入到位置 \(j\) 的方案数,这次转移若 \(i\) 在 \(i+1\) 左侧,则可转移到 \([1,j-1]\) ,否则可转移到 \([1,j]\) ,维护差分数组最后前缀和就好。
abc372_f
这个一眼就能想成平衡树优化 dp,但是发现除了区间平移之外只有若干单点加,杀鸡焉用牛刀?平移一下头指针就好。
abc369_g
赛时把博弈忘了,第一眼觉得是长剖但是认为假掉了,最后想出来个 nb 写法才发现忘了还有个人博弈了。
正解就是长剖一下贪心选前 \(k\) 大。
abc132_f
想到数论分块,然后优化一下 dp 状态就好了,复杂度 \(O(k\sqrt n)\)
arc183_c
很遗憾的是区间 dp 再次从我的脑中消失了。
这种比较难顺着 dp 的考虑区间 dp(因为数据范围在那摆着),\(f_{l,r}\) 就是区间 \([l,r]\) 合法的方案数,转移时枚举合法的最大值位置进行转移。
abc366_g
高斯消元解线性异或方程组,但是没太理解自由元的赋值,还好 rand 可过。
abc371_g
赛时去写巨大恶心根号分治了,没发现还有这么简单的写法。
我们处理一个环后,会对置换的次数 \(x\) 加上一个形如 \(x\equiv a\pmod m\) ,我们发现
其中 \(m_i, \alpha_i\) 是 \(m\) 的标准分解。
那么可以分解出环长的质因子。设 \(f(p)\) 表示当前同余方程的解模 \(p\) 的值。那么枚举操作次数 \(k\) 的同时,要满足对环长的每一个质因子 \(p\),\(k \bmod p\) 都和 \(f(p)\) 相同。满足这个条件的情况下,再让字典序尽可能小。
于是我们做完了。
abc373_g
赛时急眼了不说了,这个题很唐,但是手写费用流会 T ,所以 ATcoder 封装的费用流怎么跑的那么快啊?
abc373_f
对于相同 \(w\) 按 \(v\) 从大往小贪心取,是个凸函数,然后正常做 01 背包就好了。