CF1310E Strange Function 题解
Problem - 1310E - Codeforces
考虑倒推,每个数具体是啥是不知道的,但是我们可以知道数的种类。
本质上对于集合中的每一个元素,就代表一种不同的元素。
如果进行一次逆变换,元素种类就会变成原来集合 $\sum a_i$。
一开始是有限定的,集合大小小于等于 $n$。
先处理 $k = 1$ 的情况:划分数 $\tt Dp$。
$k = 2$ 的情况,就是考虑需要倒推两次,不妨考虑当前集合是 $c$,考虑 $b$ 中出现次数为 $c_i$ 的数是 $v_i$,可以得到 $\sum c_i v_i \le n$。
我们只需要考虑其存在性即可,我们不妨让 $c_i$ 递减,之后 $v_i = i$。这样可以取到最小值。
所以我们只需要满足 $\sum c_ii \le n$ 即可,考虑进行 $\tt Dp$ 因为钦定了 $c_i$ 的关系,我们需要二维的状态复杂度 $O(n ^ 3)$,但是事实上我们钦定 $c_i$ 所以只需要枚举差分值就行了。考虑再推式子。
我们让 $t_i = c_i - c_{i + 1}$。
$$\be ...
CF1620F Bipartite Array 题解
Problem - 1620F - Codeforces
二分图本质上就是没有奇环,注意给定的是一个排列。
考虑什么时候会出现奇环,考虑如果 $(i, j), (j, k)$ 那么必然存在 $(i, k)$ 这样就去世了。
也就是如果存在 $(i, j)$ 那么 $\forall k \in [j + 1, n], a_k \ge a_j$。
我菜了。
既然结论已经想到这个份上了,直接考虑 $\tt Dp$。
我们注意结论:序列中不存在 $i < j < k, p_i > p_j > p_k$。
考虑进行填数设 $f(i, x, y)$ 表示填了 $i$ 个数,最大值为 $x$,已经填好的逆序对末尾的最大值为 $y$,能否没有奇环。
考虑优化状态,对于两个序列 $p_1, p_2$ 在相同的 $x$ 下选取较小的 $y$ 更加有潜力。
显然对于 $(i, y)$ 是固定的,$x$ 越小序列越容易合法。
考虑将状态变成 $f(i, x)$ 表示能取到的最小的 $y$。
如果不合法就是 $+\infty$。
转移方程,设 $z = \pm p_{ ...
再做 CF1603E A Perfect Problem 题解
Problem - 1603E - Codeforces
虽然是再论但是是一点题解的印象都无了。
首先从小到大开始考虑,对于这样的一个序列事实上我们可以任意排列,答案就是:
$$\frac{n!}{\prod_{i} c_i!}$$
其中 $c_i$ 表示一个数重复出现的次数。
发现做不下去了,考虑找找性质。
不妨考虑区间 $[l, r]$ 那么需要满足 $a_l \times a_r \ge sum_r - sum_{l - 1}$。
考虑对于同一个 $r$,$l$ 越小限制越强。
对于该序列只要前缀是合法的答案一定是合法的。
直接考虑 $\tt Dp$ 需要枚举第一个数,然后记录前缀和。
复杂度是 $O(n\times n^3\times n)$ 是过不去的。
考虑是否还有性质,不是很好找,那么考虑压缩状态,如果考虑前缀和第一个数不论转移的复杂度就已经是 $O(n^4)$ 了。
所以考虑能不能少枚举一些东西,前缀和是不能省掉的,考虑能否倒叙枚举,发现如果 $a_n \le n - 1$ 就去世了。所以 $a_n = n, n + 1$。
可以省略掉一维了,但是算上 ...
CF1299D Around the World 题解
Problem - 1299D - Codeforces
切了,但是没有完全切。
有的时候还要打表一下证明一下结论。
md 不用打表,直接算就行了,之前直接感觉就是 $2^x$,比较大。
好吧,之前写过,严谨地说是抄过。现在能想到了还是挺好的。
打表得到线性基本质不同的个数为 $374$ 个。
考虑合并连通块就是线性基之间的转移,直接设 $f(i)$ 表示当前是第 $i$ 个线性基的方案数。
转移的时候保证线性无关就行了。
之后考虑三元环的情况:
因为没有重边所以没有二元环。
都是有 $2$ 条边连接节点 $1$,考虑分类讨论一下:
不选择,方案数为 $1$。
选择 $1$ 条边,随便选择即可方案数为 $2$。
选择两条边,加上当前线性基,方案数为 $1$。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 ...
CF1225G To Make 1 题解
Problem - 1225G - Codeforces
一点想法首先我们看这个神奇的函数 $f$。
如果说 $x = k^a\times b$ 的话,那么 $f(x) = b$。
我们考虑对于 $x = k^{a_1}b_1, y = k^{a_2}b_2, a_1 < a_2$。
我们可以得到 $(x + y) = k^{a_1}(k^{a_2-a_1}b_2 + b_1)$,显然右边部分肯定不是 $k$ 的倍数,是可以直接算出来的。
考虑题目中的限制是最终的答案为 $1$,那么意味着最后一次合并有 $k | x +y$ 。
注意到 $n = 16, k = 2000, \sum a_i \le 2000$,是不是可以进行状压。
复杂度貌似是 $O(2^n\sum a_i)$。考虑设 $f(S, i)$ 表示集合 $S$ 中的数能否拼出 $i$。
转移的时候枚举一下加入哪个数,复杂度是 $O(2^nn\sum a_i)$。是不是可以 $\tt bitset$。
考虑枚举转移位置和 $S$,我们貌似可以预处理 ...
CF1062F Upgrading Cities 题解
Problem - 1062F - Codeforces
可能是题单里面最水的一题了吧。
直接想到拓扑排序,考虑在队列中的所有点都是互相不可到达。考虑使用正反两次拓扑排序来计算答案。
q.size() == 1 $x$ 可以到达剩下的所有点。
q.size() == 2 考虑队列中的 $x, y$ 两点显然 $x$ 是不能到达 $y$ 的,如果出现 $y$ 的一个出边 $y \to z$ 且 $z$ 的入度为 $1$,那么 $x$ 就没救了,直接打标记。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495#include <bits/stdc++.h>using namespace std;namespace Legendgod { namesp ...
CF1149D Abandoning Roads 题解
Problem - 1149D - Codeforces
一点小思路:
貌似有点问题。
首先保证图连通,发现点数为 $70$ 边数最多为 $200$。对于两种边权 $a, b$ 有一种想法就是让最短路包含在最小生成树中。或者说我们优先考虑边权小的边,先让其尽量成为生成树,能否直接暴力枚举端点 $i$,考虑暴力构建树。
是否有一个结论,就是我们考虑只使用 $a$ 边这样最短路肯定是可以在生成树上的。
如果仅仅使用 $a$ 边发现图是不连通的,我们考虑当前点 $i$ 所在的连通块。
现在本质上就是尝试暴力加入若干边,能否考虑使用 $b$ 边继续更新结果?
显然 $b$ 边只要能使图连通就是最小生成树了,考虑使用 $b$ 边使得 $1 \to i$ 的距离最短。
不妨考虑对于 $i$ 也进行一次最短路,是不是直接弗洛伊德更新呀?
就是每个点对之间打标记是否是通过了 $b$ 边进行更新即可。
$\tt solution$考虑还是对于最小生成树,先考虑 $a$ 边构成的若干个连通块,之后只要使用 $b$ 边保证距离最小就行了,考虑需要保证是树的情况,所以一个点出去了之后就不会再回来,直接使 ...
CF1615F LEGOndary Grandmaster 题解
Problem - 1615F - Codeforces
首先怀疑一手这个东西是 $\tt Dp$。
就只会怀疑了 $\cdots$
有一个很强的转化,考虑先对于每个串的偶数位置取反,之后原来的操作本质上就是交换两个数。
考虑对于位置 $a_i, a_{i + 1}$ 经过操作后是 $!a_i, !a_{i + 1}$。
经过变换后是 $a_i, !a_{i + 1}$ 和 $!a_{i}, a_{i + 1}$。发现对于 $a_i \ne a_{i + 1}$ 经过交换是不变的,所以这个变换满足充要条件。
考虑合法的条件就是两个序列 $1$ 的个数相同,考虑如何计算最小的操作次数。
题目说只能 $s$ 动所以比较简单考虑通过交换去填充 $1$ 的位置,显然每个 $1$ 填充的最优位置是确定的。
不妨考虑 $S$ 中第 $i$ 个 $1$ 位置在 $x_i$,$T$ 中为 $y_i$,答案就是 $\sum_{i \ge 1} |x_i - y_i|$。
还要继续转化,考虑 $S$ 中 $1 \sim i$ 的 $1$ 的个数为 $a_i$,$T$ 中为 $b_i$。
答案同样可以 ...