Codeforces 2400 ~ 2600题目记录

发现自己太菜了, 先做2400 ~ 2600的, 后面做2600 ~ 2800的

CF1559D2 Mocha and Diana (Hard Version)

首先我们可以对于任意选择一个点(假设是1), 把能连的边都连上。 然后观察现在的两个森林。

在第一个森林中, 不和1联通的一定在第二个森林中和1联通, 所以我们只要选出在第一个森林里和1联通的然后在第二个森林里不和1联通的哪些点去和在第一个森林里的哪些不和1联通的点连边就好了

CF1554E You

发现我们考虑给每一条边定向, 表示一个选的顺序, 那么如果有一条边 \(u \sim v\) 的话, 相当于 \(a_v + 1\)

现在考虑固定下 \(k\ (k \neq 1)\) 的时候怎么计算, 我们从下往上考虑, 那么叶子节点的边一定是朝上的, 这样会发现其实每一条边都是确定的, 所以其实对于 \(k \neq 1\) 的时候, 方案数至多为 \(1\). 在加以观察, 发现 \(\sum a_i = n - 1\) 所以 \(k\) 一定是 \(n - 1\) 的约数, 这样子就是 \(O(n\times d(n))\)的 复杂度, 稍加优化可以到 \(O(w(n)\times n)\)

CF1550E Stringforce

二分答案之后DP就好了

CF1548C The Three Little Pigs

当时化简不动式子的时候可以考虑生成函数

\[\sum_i^n \binom{3\times i}{x} \]

那么其实就是

\[[x^x]\sum {(1 + x) ^ {3i}} \]

发现可以等比数列求和, 写成 \(P = \frac{A}{B}\) 的形式, B是一个小多项式, A的每一项都方便求出, 递推求出 \(P\) 就好了

CF1542E1 Abnormal Permutation Pairs (easy version)

(Easy 比较简单, 顺便做Hard)

首先我们要保证字典序比较小, 那么我们可以枚举相等的前缀长度和第一个不同的两个数, 然后对于后面的排列其实是对逆序对个数的差有一个限制, 我们可以考虑生成函数一个一个的加入, 那么每一次相当于是卷上一个

\[(\sum_{i = 1} ^{k} x^i) \times (\sum_{i = 1} ^ {k} x^{-i}) \]

可以化简之后模拟多项式运算

CF1539F Strange Array

Codeforces良心数据结构题, 假设当前我们考虑的数大小为 \(x\), 如果我们把比x大的数设为1, 比x小的数设为-1, 其实x到某一个区间的中位数的距离就是这个区间的子段和, 那么我们就只要对最大最小子段和check一下就行

CF1539E Game with Cards

log做法很多, 我们来考虑一下 \(O(n)\) 的做法。

首先考虑操作序列是什么, 一定是由若干段0 / 1组成的, 首先要满足每一个0 / 1都是可以满足的这一位的限制的, 然后就是你既然要取一段1, 那么上一次出现的0一定要满足这一段区间的限制, 然后我们就可以设什么 \(dp[i][0 / 1]\) 满足考虑完前i位然后转移就是选之前的一个异色的, 加上考虑这一段是否可行。 这样子只能优化到 \(O(n \log n)\) , 这个问题只要就是你要枚举一个位置, 然后check这个位置, 而且这个我们枚举的位置是十分重要的, 那优化的时候我们就可以考虑倒着来, 这样我们就枚举到了最重要的这个, 然后考虑向后寻找, 向后寻找可定越短越好, 找一个变量记住往后走第一个可以的 0 / 1,那么就是 \(O(n)\) 的了

CF1536F Omkar and Akmar

挺有意思的一个题, 我们首先可以发现, 一定是后手必胜。

可以归纳证明。

然后发现最后的答案一定是形如若干个以A开头B结尾的连通块被空着的隔开, 那么枚举有多少个空位, 插板法DP就好了

CF1534F1 Falling Sand (Easy Version)

Easy还是很easy, Hard也一起做了.

首先可以缩一个四联通块, 然后如果4连通块之间有影响关系的话就连边。 那么Easy的答案就是入度为0的点数。

对于Hard来言, 我们可以设一下关键点, 也就是要满足这一列的限制的话, 必须要动的连通块, 然后发现一个入度为0的点可以控制到关键点一定是按x排序之后是连续的, 那么其实就是一个线段覆盖的问题

CF1530F Bingo

比较奇怪的DP + 容斥

发现确定了行的状态之后其实每一列就是独立的了, 就可以做DP(对对角线要特判

CF1528D It's a bird! No, it's a plane! No, it's AaParsa!

Dij变种题。

首先我们发现每一个点是可以停留一段时间的, 这是不太好处理, 但是告诉我们到达一个点肯定是越早越好。 到达一个点之后我们可以考虑是停留还是沿着一条边走过去, 停留多久不好处理, 但是我们可以对 \(i\)\(i + 1\) 连上一条边, 这样就相当于在来i的那个点那里等一下, 做Dij就好了E AO9VB4MN6CP[;-0I,=8]

CF1527E Partition Game

简单决策单调性DP题

CF1527D MEX Tree

简单题,从小到大考虑每一条边选一条链计算上去就好了

Codeforces 2400 ~ 2600题目记录

posted @ 2021-09-08 21:10  Zcus  阅读(164)  评论(0)    收藏  举报