【记录】1月做题记录
1.CF1542C
不可多得的好题。来源于gyh20的题单。
首先考虑观察一下 \(f(x)\) 的性质,容易发现 \(lcm(1,2,3……,f(x)-1)|x\)。
那不妨枚举每一个 \(f(x)\) 计算一下贡献即可。本题的一个难点就在于发现上述的性质。
2.CF1528B
非常好dp,一样来自gyh20。
很容易想出来状态 \(dp_i\) 表示有 \(2i\) 个点的时候的答案,我们要考虑转移。
转移是有一定难度的,可以考虑观察一下这个匹配的性质,肯定是许多个相交的东西之间夹着一些东西,也有可能是没有夹着什么东西,如果是夹着有点的那么可能夹着 \([1,i)\) 对点。于是有 \(\sum_{j=1}^{i-1}dp_j\)。然后就是中间没有夹点的。
观察容易发现他们的弧长一定只能是 \(i\) 的因数。此题就完结了。
3.CF1806E
也是一道好题,来自正睿集训。
可以发现的是在暴力求答案的时候似乎很多点都会算重,考虑记忆化。
那么具体的记忆化流程是这样的。对于该层数的点 \(\le \sqrt{n}\) 的,如果没算过那就算,如果算过就返回,对于该层点数 \(\ge \sqrt{n}\) 的,直接算就完事了。
接下来给出复杂度证明,
对于上述的第一种情况而言,设每一层有 \(x\) 个节点,则最多访问 \(x(x-1)/2\) 次,而这样的层最多 \(n/x\) 个,所以近似 \(O(n\sqrt{n})\)。
对于第二种情况,每一层最多被调用 \(q\) 次,而这样的层又不超过 \(\sqrt{n}\) 个,所以复杂度正确。比较厉害的的一道根分。
4.CF1545B
绝世好计数题,非常牛逼!!!
发现两个连着的1可以随便乱动,但是遇到其他的1就动不了了,于是乎考虑一手炒鸡牛的转化,当遇到1时考虑成前后两个1交换位置!!!于是就变成了一个纯组合问题,单个1的位置动不了,设 \(11\) 有 \(a\) 个, \(0\) 有 \(b\) 个,于是乎就是 \(C^{a}_{a + b}\)了
5.CF1916E
这题就算是积累一个trick吧。
首先很容易想到一个思路就是枚举LCA,然后就是在子树里面找两个权最大相乘即可,考虑使用线段树进行维护,线段树里每个节点都存的是子树里面每个点到 \(u\) 的权。大体思路确定下来之后就考虑细节。怎样维护一条链上的颜色数呢?记 \(lst_u\) 表示 \(u\) 到一个跟他颜色相同的最近的的祖先,则一条 \(u->v\) 链上有多少的点的 \(lst\) 在u上面就有多少种颜色。回到问题,那么考虑递归向上来建树,首先不妨让子树内每一个答案都加一,然后让lst是当前枚举的lca的节点的子树里的答案再减一,这样就是正确的了,然后照着最原始的思路做一遍就完了。
6.CatOJ 450 D
educational的一道线段树题。
思路启发来源部分分的第二档,操作相同的部分分,这个东西需要用线段树进行维护,然后是第一档的分,启发我们使用01两种情况分讨。
这是正解就出来了,线段树维护0,1两种情况的值即可,pushup需要多想一下。
7.ARC169D
非常新的一道题,非常educational。
先把a数组排个序,因为数组顺序对答案没有任何影响。
首先我们先把取模的限制去掉,那么经过若干次次操作变为的序列就设为 \(b\)。
容易得到的是 \(\forall i:b_i \ge a_i,m|\sum b_i-a_i,\max(b_i-a_i)\le Sum/m\)
最优情况下, \(b\) 一定是单调递增的
然后我们就猜一个结论,一定有一种最优解满足 \(b=x,x+1,x+2,……,x+n-1\)
考虑证明:
我们可以用调整法证明:
把 \(b_1=b_n-n,b_n=b_1+n\),这样交换后首尾差会越来越小,而且上述约束条件依然成立,所以证毕。
然后通过约束条件找到 \(x\) 的下界并且向上调整即可
8.CF1909F1 F2
F1
首先是一眼DP的。设 \(dp_i\) 表示填到了第 \(i\) 位,只考虑 \(\le i\) 的数的排列方案数。
考虑转移:
首先这个东西肯定是由 \(i-1\) 这个位置转移过来的。然后可以发现 \(a_i-a_{i-1}\le2\) ,否则无解。然后分讨一下转移方程即可。
F2
和F1的唯一区别就是这里我们需要从 \(j\) 转移到 \(i\)。
那么考虑如何转移,我们发现从 \(j\) 到 \(i\) 需要多填 \(a_i-a_j\) 个在 \([1,i]\) 之间的数,不妨设新填了 \(k\) 个 \((j,i]\) 的数,然后我们可以得知填在 \((j,i]\) 中的并且满足 \(\in [1,j]\) 的数有 \(a_i-a_j-k\) 个。考虑使用组合数计数即可。
新增栏目:What Can I Get From This Problem(WCIG)
9.ARC168B
比较好的NIM变形。虽然是简单题,典题,但是第一次遇到还是记录一下。
首先NIM的结论是,场面异或和为0,先手必败,否则必胜。
所以当NIM和不为0是输出-1即可。思考如何能让先手再原本必输的局面转为必胜。
那就是让后手无法一次性将石子异或和转化为0,于是我们心生一计,取不为最大值的其他堆,使得全局异或和为最大值,然后令 \(k\) 等于最大值即可。
10.ARC169C
WCIG:题面给的非常dp,但是交换操作后效性太大,非常的不容易dp,考虑组合计数,一般来说计数就俩大思路:纯组合数学,或DP
DP这个思路被弃了,考虑纯组合,但是由于给的是个串,并且不同操作可以产生相同结果,所以要去思考我们按照什么样的枚举顺序才能保证不重不漏,我们不难发现一个串到另一个串的最小变换次数一定是固定的,虽然这是个很显然的性质,但是通过这个性质,我们就确定了我们要按照什么样的枚举顺序进行计算贡献——最小变换次数。
我们先看一子个问题:给定两个字符串问至少多少次操作才能将第一个转化为第二个字符串。容易发现只有同一个位置出现不同字符的情况会产生贡献次数,不妨设 \(cnt_{S,T}\) 表示同一位置第一个串的字符是 \(S\),第二个串的字符为 \(T\)的出现次数,优先贪心,什么 \(AB\) 啊,\(BA\) 啊就先交换了。但是还有一个情况就是 \(AB,BC,CA\),或是 \(AC,CB,BA\),这些东西要花3的花费。这样我们就可以计算了。思考了这个问题后我们发现我们的最小花费是和 \(cnt\) 数组有关的,最小花费是,考虑枚举cnt数组进行计算。容易发现 \(cnt_{S,T}-cnt{T,S}\) 一定是一样的,所以变量只用枚举4个即可然后排列组合计算贡献即可,在 \(O(k^4)\) 的时间复杂度内解决该问题。
WCIG:学会思考子问题
11.CF1919E
连续段DP,见连续段DP的总结。
最近发现一个事儿:题解不能留着很多最后来写,不然会痛不欲生,于是从今天起,每天更新这个东西,不再周更了。
12.CF1406D
首先这个题面给的就很鬼畜,所以考虑发掘一点性质。
容易观察到 \(b_n\) 最大, \(c_1\) 最大。
然后从最简单的情形开始思考, \(a\) 全相等, 那显然 \(b,c\) 也全相等。
然后考虑 \(a\) 的递增部分,肯定是由 \(b\) 提供的,因为如果是 \(c\) 提供的话那 \(c\) 全体都要上升,递减部分肯定就是 \(c\) 提供的了。
再继续挖掘点性质,\(a_1=b_1+c_1=b_n-\sum_{i=2}^{n}b_i-b_{i-1}+c_1\)。于是 \(ans=⌈ \frac{\sum_{i=2}^{n}b_i-b_{i-1}}{2}⌉\)。容易使用树状数组进行维护。
WCIG:遇到限制奇怪的问题先从简单的情形开始考虑问题
AGC005D
WCIG1:积累一个trick,排列计数在很复杂的情况下可以转化为棋盘问题
WCIG2:子集反演:\(\sum f(i)\times (-1)^{i}\)

浙公网安备 33010602011771号