Loading

22.10 杂题

一个做题记录,大部分题目都是一句话题解,小部分题目可能会有更详细的题解。


咕咕咕的题

LG5605 小A与两位神仙

[ARC086F] Shift and Decrement


ZROI 22noip10连 day4 Dark Matter

\(1\) 后面的都去掉,然后前面的从前往后算。

ZROI 22noip10连 day4 Zero

考虑kruscal求最小生成树,形成若干连通块,每个连通块可以连成一个完全图,那么只需要当前非树边可以塞进连通块里即可。还需注意之后的已经存在的边有可能会占用连通块里的边,所以需要求出重构树来求出这些边加入的时刻。

ZROI 22noip10连 day4 Zero Two

先考虑排列的情况,考虑 \(n\) 在b序列种出现的位置。枚举这个位置,显然两边形成子问题。具体来讲 \(f_{l,r,i}\) 代表区间 \([l,r]\) 不大于 \(i\) 的子序列的答案。枚举 \(i\) 出现位置转移即可。如果 \(i\) 没有出现就 \(f_{l,r,i}=f_{l,r,i-1}\)。然后如果不是排列离散化即可。

LG8593 「KDOI-02」一个弹的投

显然同一层的炸弹才会碰到,落地时间相同,算出碰撞时间和落地之间的不等式,发现数量是一段范围即可求出。

LG8594「KDOI-02」一个仇的复

考虑枚举有多少个竖着的以及多少连续的竖着的,接下来即可算出有多少个位置可以割,那么答案就很好算了。

LG8595 「KDOI-02」一个网的路

不同的树分开考虑,割成若干条链。\(f_{u,0/1/2}\) 分别代表把 \(u\) 删了,\(u\) 是某条链端点,以及 \(u\) 是某条链中间(端点在 \(u\) 子树内)。

LG3588 [POI2015] PUS

考虑大的向小的连一条边,那么会形成一个dag,在这个dag上贪心即可。每次会把区间分成 \(O(k)\) 个小段,那么对这 \(k\) 个位置建虚点,然后分别向每个区间连边,线段树优化建图,边的量级是 \(O(\sum k \log n)\) 的。注意区分 \(>\) 边和 \(\ge\) 边。

LG3236 [HNOI2014]画框

很妙啊。把 \((\sum a_{i,p_i},\sum b_{i,p_i})\) 变成坐标系中的点。那么找到 x 坐标,y 坐标最小的点 \(A,B\)。答案肯定在这条线段的左下方。找到离 AB 最远的点 \(C\),显然三角形 \(ABC\) 之间的点都不如 \(C\)。于是递归去做线段 \(AB,BC\) 即可。考虑如何求出 \(C\)?即求使得 \(S\Delta ABC\) 最大的点,也就是 \(\vec{AB}\times \vec{AC}\) 最大的 \(C\)。即 \((x_B-x_A)(\sum (b_{i,pC_i}-b_{i,pA_{i}}))-(y_B-y_A)(\sum (a_{i,pC_i}-a_{i,pA_{i}}))\),于是从新定一下权值跑最大权完美匹配即可。

LG7278 纯洁憧憬

题解

LG7140 [THUPC2021 初赛] 区间矩阵乘法

推式子,记 \(s\)\(a\) 的前缀和。

\[\begin{aligned} ans&=\sum_{i=0}^{d-1}\sum_{j=0}^{d-1}a_{p_1+di+j}\times (s_{p_2+dj+d-1}-s_{p_2+dj-1})\\ &=\sum_{j=0}^{d-1}(s_{p_2+dj+d-1}-s_{p_2+dj-1})\times \sum_{i=0}^{d-1}a_{p_1+di+j} \end{aligned} \]

后面那个部分可以写成

\[\sum_{i=0}^{d-1}a_{x+di} \]

随便根号分治维护。

LG4657 [CEOI2017] Chase

不想写了,还是来口胡吧。枚举一个起点作为根,然后考虑dp \(f_{u,i}\) 代表 \(u\) 的子树里放 \(i\) 个的最小值,转移方程 \(f_{u,i}=\max \max(f_{v,i},f_{v,i-1}+sum_u)\),其中 \(sum_u\) 代表 \(u\) 所有儿子的 \(F\) 的和。然后换根dp即可,然后记得根一定要选。

LG6822 [PA2012]Tax

考虑把点变成边,边变成点,那么最后一共会有 \(O(m^2)\) 条边。建边的时候使用前缀和优化即可,边数优化到 \(O(m)\)

LG5605 小A与两位神仙

数学题就不想写代码只想口胡。。。

首先肯定存在原根 \(g\),那么我们只需要求出离线对数 \(\text{ind}_{g}h\) 以及欧拉函数。

算了,这题先弃了。

CF1709E XOR Tree

CF590E Birthday

如果 \(s_i\)\(s_j\) 的子串,就连一条边 \(j\to i\)。即求这个dag最长反链,等价于最小可重复链覆盖,传递闭包后跑网络流。我们只需要建出ac自动机,然后再把fail树的边加上即可得到满足条件的dag。

LG3565 [POI2014]HOT-Hotels

\(f_{u,i}\) 代表 \(u\) 子树内深度差为 \(i\) 的点的个数,\(g_{u,i}\) 代表子树内深度相同的点的 lca 距离 \(u\)\(d-i\) 的点对数,\(d\) 是点对到 lca 的距离,答案随便组合一下。

暴力转移前缀和优化是 \(O(n^2)\) 的,长链剖分可以优化到 \(O(n)\)

2022-10-25 NOIP模拟赛 线段树

http://kel.ac.cn/contest/555/problem/1

显然直接递归+记忆化就是对的。。。

2022-10-25 NOIP模拟赛 变换

http://kel.ac.cn/contest/555/problem/2

容易发现,两次操作之后个数会变成原来的根号,于是维护前三次的答案,然后第四次开始暴力即可。

2022-10-25 NOIP模拟赛 树状数组

http://kel.ac.cn/contest/555/problem/3

树状数组其实呈一个树的结构,而这个过程其实就相当于做 k 次树上前缀和。设一个深度差为 \(d\) 的点,他的贡献是 \(\binom{k+d-1}{d}\)。而树状数组的树高是 \(\log\) 的,所以直接暴力即可。

2022-10-25 NOIP模拟赛 二进制

http://kel.ac.cn/contest/555/problem/4

思考一个暴力,把当前q跳到第一个满足i的位置,这样是 \(O(R-L+1)\) 的。考虑最后有一大段 \(0\),那么这显然是可以一起跳的。毛估估一下复杂度变成 \(log\) 级别。

[ARC086F] Shift and Decrement

LG5604 小O与排列

LG5632 【模板】Stoer-Wagner算法

考虑两个点如果割完之后在同一边,那么就可以合并成一个点。考虑求任意两个点的最小割。维护一个集合,以及一个函数 \(w(i)=\sum_{j\in A}d_{i,j}\),每次找到 \(w\) 最大的加入集合 A。然后把最后两个点作为 \(s,t\),这两个点的割就是 \(w(t)\)

LG4198 楼房重建

线段树维护前缀最值,考虑如何合并。维护 \(w(l,r)\) 代表区间 \((mid,r]\) 的贡献,合并时用 \(mx(l,mid)\) 拿去在 \((mid,r]\) 的线段树上二分。复杂度 \(O(n\log^2n)\)。好像还有单 \(\log\) 做法但是我不会。

LG5163 WD与地图

首先倒过来做,用权值线段树维护每个SCC,考虑一条边的两端在什么时候合并,显然可以二分。于是我们做一个整体二分,二分的过程中保留左边的边,递归进右边,再回溯。所以用可撤销并查集即可。

CF1361C Johnny and Megan's Necklace

枚举答案,然后发现及要求相邻的后 \(i\) 位全部相等,那么对于原有的一条边 \((u,v)\),我们连边 \((u\bmod 2^i,v\bmod 2^i)\),然后求是否有欧拉回路即可。

posted @ 2022-10-22 10:37  Semsue  阅读(12)  评论(0编辑  收藏  举报
Title