2023年10月以前的非trick类杂题(待重置)
2023.10.4
搬运+整合。
ABC306Ex
首先先考虑只有 $<$ 和 $>$。
分析一下可以发现,只有当形成 $<$ 或 $>$ 的环时,该图是不合法的,所以题目可以转化为对每条无向边改为有向边,然后对 $\text{DAG}$ 计数。
因为 $n\le17$,所以我们考虑状压 $\text{dp}$ 。
我们考虑 $\text{DAG}$ 的构成:拓补时,入度为 $0$ 的点会被删除。
所以我们可以枚举入度为 $0$ 的点的点集,由于两者连接的边可以换方向,我们只用考虑枚举独立集即可。
很显然这会算重,考虑容斥。
我们分析一下算重的原因:一个独立集的子集必然为独立集。
所以任何一个大小大于 $1$ 的自己都会算重,所以系数为 $(-1)^{ \text{点数}+1}$。
然后我们考虑 $=$ 的处理。
其实它就相当于合并两个点。
我们如法炮制,在枚举每个独立集时,我们可以直接将任意两个有连边的两点合并。
这就等价于记录连通分量的个数。
同理容斥,同理容斥系数为 $(-1)^{ \text{连通分量的个数}+1}$。
这样就做完了。
2023.7.14
AGC013C
性质:相对位置不变
每个蚂蚁掉头原来的坐标集合可以转化为每个蚂蚁不掉头的坐标集合。
由于相对位置不变,我们只用记录1号编号的位置即可。
考虑直线,与最终坐标的第一个位置对应即可。
环上则看有多少次蚂蚁顺时针与逆时针经过了0位置以确定断环后的起始点。
AGC027B
首先这坨的代价不好处理,还有顺序问题。
贪心思想,对于每次选的一组垃圾,一定是到最远点后逆序选择垃圾。(反证法)
考虑优化表示法,先表示出某次的代价:
$$p_{1}+\sum_{i=1}^{m}(i+1)^{2}(p_{i}-p_{i+1})$$
$$=\sum_{i=1}^{m}(2i+3)p_{i}$$
我们同样贪心地为每个大的 $p$ 分配小的系数,设操作次数为 $k$ ,对模 $k$ 同余的数分在一组。(倒序分配)
对于n,模 $k$ 同余可以考虑整除分块,每组的代价暴力计算,但会超时。
正确的做法是枚举k,借助前缀和算每次的值,复杂度是调和级数。
AGC012D
首先考虑交换操作与方案数有什么联系。对于交换等操作(运算),我们考虑其性质:具有传递性,于是易得等价与对于一个交换操作的连通分量中的位置全排列。
于是转化为连通性问题,即求每个满足条件的位置均被连边后的连通情况。
显然暴力连边不能过,要优化。
我们考虑先去掉颜色的限制。此时若一个点要加入一个连通分量,那么贪心地去连连通块中权值最小点即为最优。反之,若最小点连不了,则不可能连其他点,于是独立成块。
现在考虑颜色的限制。
考虑同颜色的类比如上方法连,这样就只剩下一堆无法与同色点连的点,同理,与非同颜色的最小点判断并连接即可。非同颜色的最小点维护最小值与次小值即可。
最后计算组合数即可。
2023.9.2 NOIP B poker
考虑依靠图论建模形式化题面。
首先每张卡只负责两个点,所以将每张卡看做一条边后就是一个给边定向(所以定向这个概念究竟如何描述?),此时就是求给边定向的方案,使得一个区间内的点至少被一条边指向。
考虑每个连通块分讨,考虑其简单情形,易发现这东西对于有环的都有解,删一条环上任意一点的临边,然后 $\text{dfs}$,最后加回来即可构造一组解。
所以只用考虑树的情况,考虑问题的反面,如果完整的包含了一颗树即无解。
用并查集维护边,随便整个 $\text{DS}$ 维护区间包含关系即可。
但是为什么不能建点,考虑匈牙利?
2023.9.7
ABC310G Takahashi And Pass-The-Ball Game
首先这种排列的一个套路(?):考虑建模形式化题面。
期望可以写成为一堆和除以 $k$,最后判一判就好了。
这样原题就是在求一个数往前走 $k$ 步包含的子树上所有节点的和(但不含本身)。
这东西看着还挺典的。
有这样的经典思路:
- 考虑相邻两项的递推
你就对每个点维护距离为 $k$ 的点的和,然后你就考虑反过来对每个点算贡献,算 $k$ 步后的点可以跑一个倍增,也可以搞一堆分讨,然后前缀和算算即可。
有这样的强大思路:
- 直接对每个点考虑倍增
你发现转移矩阵的乘法是可以 $O(n)$ 计算的,而等比数列求和问题可以分治解决,所以维护一下答案和转移矩阵就可以了。
2023.9.15
CF1805F1 Survival of the Weakest (easy version)
首先考虑简单情形,考虑只做一次时的情况。
这个问题很典,经典贪心,不在此处解释。
那你暴力合并 $O(n^2 \log n)$ 即可。
但是注意到取模,分析后发现值域似乎会很大,暴力合并结合高精时间无法接受。
你考虑简化一下集合,考虑我们只关心 $a_i+a_j$ 的大小关系。
回顾一下问题,我们尝试分析值域的变化,取特殊位置尝试递推分析,我们发现最小值会变成原来的两倍,所以值域每次至少会变成原来的两倍。
考虑如何处理,首先考虑最小值的简单情形,不难考虑为 $0$ 的情况,此时不会对值域产生增大影响。
对于其他情况,我们可以直接将所有数减去 $a_1$ ,直接提前计算 $a_1$ 的贡献。
于是暴力 $O(n^2 \log n)$ 递推即可。
2023.9.28
2023.9.26 CSP-S B 树上竞技
考虑按每条边的贡献分组。
后面就平凡了。

浙公网安备 33010602011771号