『杂题』做题记录1

(题意不解释了,太麻烦

CF388B

构造好题。

考虑经典套路,我们二进制拆开 $k$ ,然后构造辅助图,满足其中任意点

走出最短路为 $2^i$ 考虑辅助图中有两点向另外两点分边连出 $2$ 条边。

显然当两点走出方案数为 $2^i$ 时,另外两点走出方案数为 $2^{i+1}$ 。

构造总边数为 $O(\log n)$ 。

CF388C

有这样一个显然的事实是: 对于容易取到的那一半,两人显然会取走。

偶数堆显然不用考虑,对于奇数堆,将最中间点单独考虑,最后从大到小先后手轮流取。

CF1073E

通过观察数据范围,可以显然看出这是一道数位 $dp$ 。

考虑普通数位 $dp$ 可能无法判断合法,考虑状压。

设: $f_{i,s}$ 表示第 $i$ 位出现数集 $s$ 在没限制情况下的前 $i$ 位数和,

$g_{i,s}$ 表示第 $i$ 位出现数集 $s$ 在没限制情况下的方案数。

转移方程可显然写出: $f_{i,s|j} = \sum f_{i-1,s}+10^{i} \times j \times g_{i-1,s}$ 。

$g_{i,s|j} = \sum g_{i-1,s}$ 。

CF1609E

一眼 $\text{DS}$ 。

考虑用线段树维护,对于一个区间,维护 $6$ 个信息。

$a,b,c,ab,bc,abc$ ,分别表示区间内,不出现 $a$ , $b$ , $c$ , $ab$ , $bc$ , $abc$ 至少需要删几个字符。

转移很好写,这里就不提了。

SP1609E

推一发柿子:

$$\sum_{i=1}^{n} \sum_{i=1}^{m} i\times j \times \mu(\gcd(i,j)) \times \gcd(i,j)$$

$$=\sum_{T=1}^{n} T^{3} \mu(T) \sum_{i=1}^{\lfloor\frac{n}{T}\rfloor} \sum_{i=1}^{\lfloor\frac{m}{T}\rfloor} i\times j$$

$$=\sum_{T=1}^{n} T^{3} \mu(T) \sum_{i=1}^{\lfloor\frac{n}{T}\rfloor} \sum_{i=1}^{\lfloor\frac{m}{T}\rfloor} i\times j [\gcd(i,j)=1]$$

$$=\sum_{T=1}^{n} T^{3} \mu(T) \sum_{i=1}^{\lfloor\frac{n}{T}\rfloor} \sum_{i=1}^{\lfloor\frac{m}{T}\rfloor} i\times j \sum_{k|i,k|j} \mu(k)$$

$$=\sum_{T=1}^{n} T^{3} \mu(T)\sum_{k=1}^{\lfloor\frac{n}{T}\rfloor}\mu(k) \sum_{k|i} i \sum_{k|j} j $$

$$=\sum_{T=1}^{n} T^{3} \mu(T)\sum_{k=1}^{\lfloor\frac{n}{T}\rfloor}\mu(k)k^{2} \sum_{i=1}^{\lfloor\frac{n}{kT}\rfloor} i \sum_{j=1}^{\lfloor\frac{n}{kT}\rfloor} j $$

设 $S(n)=\sum_{i=1}^{n} i$ 。

$$\sum_{T=1}^{n} T^{3} \mu(T)\sum_{k=1}^{\lfloor\frac{n}{T}\rfloor}\mu(k)k^{2} S\left(\lfloor\frac{n}{kT}\rfloor\right) \times S\left(\lfloor\frac{m}{kT}\rfloor\right)$$

设: $d=kT$ 。

$$\sum_{d=1}^{n} \sum_{T|d}T^{3}\mu(T)\mu\left(\dfrac{d}{T}\right)\times \left(\dfrac{d}{T}\right)^{2}\times S\left(\lfloor\frac{n}{d}\rfloor\right) \times S\left(\lfloor\frac{m}{d}\rfloor\right)$$

$$=\sum_{d=1}^{n} d^2\times S\left(\lfloor\frac{n}{d}\rfloor\right) \times S\left(\lfloor\frac{m}{d}\rfloor\right) \sum_{T|d}T\mu(T)\mu\left(\dfrac{d}{T}\right)$$

设: $f(n)=\sum_{T|n}T\mu(T)\mu\left(\dfrac{n}{T}\right) $

答案即为:

$$\sum_{d=1}^{n} f(d)d^2S\left(\lfloor\frac{n}{d}\rfloor\right) S\left(\lfloor\frac{m}{d}\rfloor\right)$$

预处理 $g(n)=\sum_{i=1}^{n} f(i)i^2$ ,然后答案整除分块即可。

复杂度 $O(n\log {n} +T \sqrt{n})$ 。

发现 $\log n$ 不好看, $f(n)$ 显然是积性的,线性筛中 $O(n)$ 做。

复杂度 $O(n +T \sqrt{n})$ 。

P5024

求树上最小权覆盖集,单点修改。

对于图上最小权覆盖集是个 $\text{NP}$ 困难性问题。

但是树上有个性质:最小权覆盖集等于全集减去最大权独立集。

然后就是动态 $dp$ 板子题了。

CF1149E

图上 $\text{nim}$ 。

对于这个 $\text{DAG}$ 考虑使用类似题目套路 。

考虑分层,对于一个节点属于第 $i$ 层当且仅当 它向 $0,1,2,3,\dots,n-1$ 层点连边,且没有向第 $i$ 层点连边。

特别的,我们设出度为 $0$ 的点属于第 $0$ 层。

然后很显然的性质是:考虑求出每层异或和 $p_i$ ,先手必胜当且仅当存在 $p_i\not=0$ 。

因为此时,先手只需找到最大 $i$ ,满足 $p_i\not=0$ ,对于这层我们可随便选点修改,根据 $\text{nim}$ 套路,我们可将其修改为 $p_i=0$ 。

由于连向 $0,1,2,3,\dots,n-1$ 层点,又没有修改限制,则显然可将 $p$ 全部改为 $0$ ,对于后手这显然是必败态。

然后这题就只需拓扑排序,分层即可。

AT3617

$prufer$ 序好题。

板子题求的是给定度数,求树本质不同个数。而这题是个基环树。

同理可用 $prufer$ 序求解。但环不好处理,考虑单独判环。

我们考虑 $prufer$ 序求解过程,最后会剩下 $2$ 个数。

显然求解 $prufer$ 时不会删除环,且环周围会留下一个点。

考虑分别求解 $prufer$ 方案数和环的方案数,显然环在翻转旋转下,本质不同个数为 $\dfrac{(x-1)!}{2}$ 。

然后最后的环上一点与一点相连的,在 $prufer$ 序中出现 $deg_u-3$ 次。

其余则是 $deg_u-2$ 次。而环外点则是 $deg_u-1$ 次。

考虑 $dp$ ,设 $f_{i,j,0/1}$ 表示考虑前 $i$ 个点, $j$ 个点在环上,是否出现特殊点的方案数。

注意最后乘上环的方案。

CF148E

显然分组背包。

考虑以每个柜子为一组,设 $g_{i,j}$ 表示第 $i$ 组选 $j$ 个数的最大值,设 $sum_{i,l}=\sum_{j=1}^{l} v_{i,j}$ 。

转移显然是 $g_{i,j}=\max_{l=1}^{j}(sum_{i,l}+sum_{i,k_i}-sum_{i,k_i-j+l})$ 。

对于答案,考虑设计状态: $f_{i,j}$ 表示前 $i$ 组选 $j$ 个数的最大值之和。

可写出转移式: $f_{i,j}=\max_{d=1}^{k_i}(f_{i-1,j-d}+g_{i,d})$ 。

P7459

题意过于复杂,在此转化题意:

给定 $vf,vd,tf,td,hf,hd \in [0,+\infty)$ ,求满足最小的 $t \in [0,+\infty)$ 使得以下(不)等式成立:

$\begin{cases}x=vf \times t\\y=hf-\dfrac{1}{2}t^2\\t \geq \dfrac{\sqrt{6\times hd}-\sqrt{6\times hd-6\times y}}{3}\\x\leq vd \times (t-td)\\y\leq hd\end{cases}$

考虑二分。

对于 $y$ 发现他是关于 $t$ 递增的函数,第 $3$ 个式子右边是关于 $t$ 单调递减的,最后两个限制当作二分左边界。

然后就做完了。

CF1307D

首先我们可在原图上 $bfs$ 得出 $1$ 到其他点的最短路, $n$ 到其他点的最短路,分别记为 $dis_{1,i},dis_{i,n}$。

首先要明确求什么: $\min (dis_{1,n},\max_{i,j \in[1,n],i\not =j} (min(dis_{1,i}+dis_{j,n},dis_{1,j}+dis_{i,n})+1))$ 。

考虑贪心,将 $dis_{1,i},dis_{i,n}$ 按照 $dis_{1,j}$ 对应值升序排序。

首先发现当 $j<i$ 时,有 $dis_{1,i}+dis_{j,n} \geq dis_{1,j}+dis_{j,n} \geq dis_{1,n}$ ,于是 $dis_{1,i}+dis_{j,n}$ 对答案没贡献。

所以对于答案简化为 $\min (dis_{1,n},\max_{i,j \in[1,n],i<j} (dis_{1,i}+dis_{j,n}+1))$ 。

我们继续考虑贪心。

考虑是否存在 $k$ 满足: $dis_{k,n} \leq dis_{k+1,n}$ 。

如果存在,由 $dis_{1,i}+dis_{i+1,n} \geq dis_{1,i}+dis_{i,n} \geq dis_{1,n}$ ,那最后答案必定是 $dis_{1,n}$ 。

如果不存在,那 $dis_{i,n}$ 必定降序,那显然的对于 $j>i+1$ ,有 $dis_{1,i}+dis_{i+1,n} \geq dis_{1,i}+dis_{j,n}$ 。

综上所述,对于 $\forall dis_{1,i}$ ,只需求解 $dis_{1,i}+dis{1,i+1}+1$ 即可。

复杂度 $O(n)$ ,对于排序可用基数排序。

CF1592D

首先我们知道答案一定是最大的边权,因为 $\gcd$ 只减不增。

对于点集查询我们需要使点集连通,我们考虑在欧拉序上二分。

复杂度 $O(n \log^2 n)$ ,查询次数 $1+\log (2n-1)$。

P8445

赛时鬼畜思路。

我们看到式子极丑无比,特别是那个 $\text{mex}$ ,老套路,枚举一发 $\text{mex}$ 。

设之为 $u$ ,我们发现 $u$ 作为区间 $\text{mex}$ 的充要条件是:区间不存在 $u$ ,且存在 $[1,u-1]$ 。

对于后面的限制,感觉非常难搞,但我们显然可以去掉这个限制,当存在 $k\in[1,u-1]$ ,且区间不存在 $k$ 时,显然 $k$ 作为 $\text{mex}$ 更优。

然后考虑怎么计算答案,我们发现 $a_i \not= b_i$ 时是没有贡献的,那只需考虑 对于值 $u$ 的最大区间满足 $a_i\not= b_i$ 或 $a_i= b_i\not=u$ 。

这显然可以预处理 $a_i=b_i=u$ 的所有位置,然后相邻位置差减 $1$ 取 $\text{max}$ 即为所求。

复杂度 $O(n)$ 。

P8446

转化一下式子,我们发现两端点不是区间极值时必劣:

原式即为: $|a_r-a_l|-(r-l+1)$ 。

讨论。

$a_r-a_l-r-l+1=(a_r-r)-(a_l-l)+1$ 与 $-a_r+a_l-r-l+1=-(a_r+r)+(a_l+l)+1$ ,的最大值即为答案。

显然两式子都可 $O(n)$ 。

CF715B

我们发现,对于所有修改操作,可看成将边权为 $0$ 的点增加若干次 $1$ 。

然而对于任意加 $1$ 操作,最短路至多 加 $1$ 。

那么这时我们可以二分操作序列,对于这操作序列,有极值差不大于 $1$ ,这样不但保证算法准确性,又可以更为简单得二分。

每次 $check$ 直接上 $dijkstra$ 。

最后复杂度为 $O(n \log m \log V)$ ,其中 $V=mL$ 。

P4548

$PGF$ 。

我们钦定 $F(x)$ 是某事件的概率生成函数。

$F(x)=\sum_{i=1}^{n} Pr(X=a_i)x^i$

我们有 $E(x)=\sum_{i=1}^{n} iPr(X=a_i)x^i=xF^{\prime} (x)$ , $E(1)=F^{\prime} (1)$ 。

以及一个小性质 : $F(1)=1$ 。

设 $f_i$ 表示长度到 $i$ 结束的概率,$g_i$ 表示长度到 $i$ 没结束的概率。

显然 $g_{i}=g_{i+1}+f_{i+1}$ ,对于他们的 $PGF$ : $F(x)+G(x)=xG(x)+1$ 。

我们定义 $k_i$ 表示第 $[1,i]$ 是否为 $A$ 的 $\text{border}$ 。

对于我们填了若干字符后,考虑直接填上期望的字符,有:

$G(x) \times (\dfrac{1}{m})^S=\sum_{i=1}^{S} a_i F(x)(\dfrac{1}{m})^{S-i}$ 。

对 $F(x)+G(x)=xG(x)+1$ 求导。

$F^{\prime} (x)+G^{\prime}(x)=G(x)+xG^{\prime}(x)$ 。

$F^{\prime} (1)=G(1)=E(1)$ 。

对于 $G(x) \times (\dfrac{1}{m})^S=\sum_{i=1}^{S} a_i F(x)(\dfrac{1}{m})^{S-i}$ 。

当 $x=1$ :

$G(1) \times (\dfrac{1}{m})^S=\sum_{i=1}^{S} a_i F(1)(\dfrac{1}{m})^{S-i}$ 。

而 $F(1)=1$ 。

$E(1)=G(1)=\sum_{i=1}^{S} a_i(\dfrac{1}{m})^{i}$ 。

然后做完了,复杂度 $O(S)$ 。

AT4546

发现障碍物很少,果断容斥。

设 $f_i$ 表示不经过其他障碍物到第 $i$ 个障碍的方案,特别的,我们设终点为障碍 。

考虑转移,我们对障碍物按照 $x$ 排序,相等则按 $y$ :

$f_i=C_{x_i+y_i}^{x_i} -\sum_{j=1}^{n-1}[x_j \leq x_i \  \text{and} \  y_j \leq y_i]f_j \times C_{x_i+y_i-x_j-y_j}^{x_i-x_j}$ 。

答案即为 $f_{n+1}$ ,复杂度 $O(n^2)$ 。

感觉这夏令营没水啥题,我要没了)

SP22412

我们考虑答案应该长什么样子:
 
考虑 $n!$ 的唯一因式分解: $n!=\prod_{p_i\in Prime} p_{i}^{k_i}$ 。
 
答案即为 $\prod_{i=1}^{d} (k_i+1)$ 。考虑如何求 $k_i$ ,我们显然发现 $k_i=\sum_{j=1}^{\log_{p_i}n} \left\lfloor \dfrac{n}{p_i^{j}} \right\rfloor$ 。
 
对于这个,我们考虑设个阀值 $B=\sqrt{n}$ 。
 
对于 $\leq B$ 的 ,直接按照式子暴力算。
 
对于 $> B$ 的 ,由于答案只有 $\left\lfloor \dfrac{n}{p_i} \right\rfloor$ 考虑整除分块,对于块 $[l_i,r_i]$ 对答案的贡献为 $\left\lfloor \dfrac{n}{p_i} \right\rfloor^{\pi(r)-\pi(l-1)}$ 。
 
$\pi(x)$ 可以线性筛预处理出来。
 
复杂度 $O(n+T \sqrt{n})$ 。
 

CF685B

我们根据重心的性质,从子树中扩展来的重心必定一直往上爬,然后每个节点只会经过一次,于是复杂度 $O(n)$ 。
 

CF348D

这题是道 $\text{LGV}$ 引理板子题。

我们考虑将起点,终点分别分成两个,使问题等价、简洁。

我们不难发现对于第一部操作,一定是走到 $(1,2)$ 或 $(2,1)$ 。

对于终点,一定是走到 $(n-1,m)$ 或 $(n,m-1)$ 。

于是问题转化成为了 $(1,2)$ 或 $(2,1)$ 走到 $(n-1,m)$ 或 $(n,m-1)$ 不相交路径个数。

但是,对于$(1,2)$ 走到 $(n,m-1)$ 与 $(2,1)$ 走到 $(n-1,m)$ 必定相交。

故起点终点一一对应,此时便想到 $\text{LGV}$ 引理。

对于答案,我们分别算出 $\omega (P_1),\omega (P_2),\omega (P_3),\omega (P_4)$ 。

分别表示为 $(1,2)$ 走到 $(n-1,m)$ 的方案数,$(2,1)$ 走到 $(n,m-1)$ 的方案数, $(1,2)$ 走到 $(n,m-1)$ 的方案数,$(2,1)$ 走到 $(n-1,m)$ 的方案数。

答案即为 $\omega (P_1)\times \omega (P_2)-\omega (P_3)\times \omega (P_4)$ 。

对于 $\omega$ ,我们可以用 $dp$ 求解,设 $f_{i,j}$ 表示从 $(1,2)$ 到 $(i,j)$ 的方案数,$g_{i,j}$ 表示从 $(2,1)$ 到 $(i,j)$ 的方案数。

转移只写 $f$ , $g$ 同类:

$$f_{i,j}=f_{i-1,j}[c_{i,j-1}='.']+f_{i,j-1}[c_{i,j-1}='.']$$

复杂度 $O(n^2)$ 。

CF510D

考虑设计一些看上去优化不了的 $dp$ 。

$f_{i,j}$ 表示考虑前 $i$ 张卡, $\gcd$ 为 $j$ ,显然有:

$f_{i,gcd(j,l_i)}=min(f_{i-1,j}+c_i)$

$f_{i,l_I}=min(f_{i-1,l_i},c_i)$

 显然值域这么大不可能全部转移,但是发现状态数很少,对于一个数不同质因数之多只有 $9$ 个。

于是考虑用 $map$ 来转移。

复杂度 $O(n \log n 2^{9})$ 。

CF1117G

考虑把答案形式化: 设 $L_i$ 表示 $i$ 左边第一个大于 $a_i$ 的位置, $R_i$ 表示 $i$ 右边第一个大于 $a_i$ 的位置。

对于 $[l_I,r_i]$ 答案即为 $\sum_{j=l_i}^{r_i} \text{min} (R_j-1,r_i) - \text{max} (L_j+1,l_i)+1$ 。

我们发现 $R_j$ 和 $L_j$ 的答案可以分开算。

显然是等价问题,只考虑 $L_i$ ,我们把询问离线,按照 $l$ 排序,考虑 $l$ 到 $l+1$ ,我们对询问是 $l$ 的打上 $tag$ 然后删除贡献 ,开两颗树状数组即可。

每次查区间,再加上打上 $tag$ 的贡献即可。

复杂度 $O(n \log n)$ 。

posted @ 2022-07-23 18:25  Detect-Perplexity  阅读(24)  评论(0编辑  收藏  举报