20230712练习总结

AGC009D Uninity

如果构造一棵点分树,答案是 \(\log n\),这是答案上界。

将问题转化为每次将若干棵 Uninity 为 \(k\) 的树连接到一个点上时将点打上 \(k+1\)\(tag\)

看题面有一个很显然的结论就是两个 \(tag=k\) 的点间的路径上一定有一个 \(tag>k\)。考虑记录 \(f_u\) 表示 \(u\) 的子树内 存在还没有找到比它大的\(tag\) 值的集合。

那么对于一个点 \(u\) 要满足:

  • \(\forall v\in child(u),tag_u\notin f_v\)
  • \(\forall v1,v2\in child(u)\)\(v1\ne v2,tag_u>max(f_{v1}\cap f_{v2})\)

每次 \(tag\) 取可行的最小值。

ARC077F SS

\(T\)\(S\) 减去 \(S\) 的最长 border 后缀得到的字符串。

如果 \(|T|\)\(|S|\) 的约数,意味着 \(S\) 是一个循环串,循环节为 \(T\)。所以变化是这样的:

\[\texttt{SS}\rightarrow\texttt{STST}\rightarrow\texttt{STTSTT}\rightarrow\texttt{STTTSTTT} \]

操作次数很多,只有前半部分有用,相当于:

\[\texttt{S}\rightarrow\texttt{ST}\rightarrow\texttt{STT}\rightarrow\texttt{STTT} \]

差分求解。

如果 \(|T|\) 不是 \(|S|\) 的约数,那么就是普通情况,变化长这样:

\[\texttt{SS}\rightarrow\texttt{STST}\rightarrow\texttt{STSSTS}\rightarrow\texttt{STSSTSTSST} \]

还是只看前半部分:

\[\texttt{S}\rightarrow\texttt{ST}\rightarrow\texttt{STS}\rightarrow\texttt{STSST} \]

发现 \(s_i=s_{i-1}+s_{i-2}\) 长度指数级增长,暴力求就可以。

ARC136E Non-coprime DAG

质数太多,不好处理,考虑用 \(2\) 作为桥梁分析限制条件。

考虑两个点 \(i,j\)\(i<j\)

\(p(x)\) 表示 \(x\) 的最小质因子。

\(i\) \(j\) 可达条件
\(i+p(i)\le j-p(j)\)
\(i+p(i)\le j\)
\(i\le j-p(j)\)
\(true\)

显然最多只能取一个偶数。

如果取了偶数 \(x\),则取 \(i<x,i+p(i)>x\)\(i>x,i-p(i)<x\)

如果全部取奇数,则须满足 \(\min\{i+p(i)\}>\max\{i-p(i)\}\)

CF297C Splitting the Uniqueness

\(n\) 向上补全成 \(3k\)。转化一下题意,即至少有 \(2k\) 个数两两不同。

认真读题会发现一个很有用的条件就是 \(s\) 互不相同。于是有 \(s_i\ge i-1\),开始瞎 ** 构造。

有一个初步的思路,将序列分成三段,那么要满足其中两段两两不同。

先试着在 \(a_{1\sim k}\)\(0\sim k-1\)\(b_i=s_i-a_i\)

既然 \(a\)\(b\) 都要满足条件,就不能将不同的全部放在 \(a\)。那么在 \(b_{k+1\sim 2k}\)\(k\sim 2k-1\)\(a_i=s_i-b_i\)

第三段是重点,现在 \(a\)\(b\) 分别有一段不同的,所以第三段同时满足 \(a\)\(b\)。考虑到目前 \(a\) 的可选范围要大且连续一些——\([k,3k-1]\),故优先满足 \(b\)

\(b\) 有两段可选——\([0,k-1]\)\([2k,3k-1]\)。要让 \(a\) 尽量大一些,以避开 \([0,k-1]\),故 \(b\)\([0,k-1]\) 中选。

如果 \(b_{2k+1\sim 3k}\) 从小到大取,则可能会和 \(s\) 同步上升,导致 \(a\) 中有相等。故 \(b\) 从大到小取。

这样段内 \(a\) 不会重复,且最小值为 \(s_{2k+1}-(k-1)\ge (2k+1-1)-(k-1)=k+1>k-1\),故也不会和第一段重复,满足。

P4654 Mousetrap

将陷阱移到树根方便思考。

把整棵树想成一条链(也就是老鼠位置到陷阱的链)上挂了很多棵树。下面沿用这个定义。

老鼠的可能会在链上向根走一截(也可能不走)然后进入某棵树并被困在里面动不了,这时管理员的最优策略就是将所有链上的点连向儿子的边堵住,然后把老鼠放出来。

考虑对每棵树 dp。设 \(f_u\) 表示老鼠从 \(u\) 进入其子树又被赶回来所需步数。转移显然。

二分答案。解决!

CF1063F String Journey

一个很显然的结论:\(|t_i|=|t_{i-1}|+1\) 时一定最优。

从后往前 dp,SAM 优化转移。

P3266 骗我呢

每行严格递增,\(m\) 个数,值域 \([0,m]\)。转化一下,就是每行有一个数不选。

考虑 dp,设 \(f_{i,j}\) 表示第 \(i\) 行没有 \(j\) 的方案数。

将转移矩阵放到网格图上,组合意义 + 容斥解决。

更详细的题解

posted @ 2023-07-12 20:19  牛肉爱吃dks  阅读(5)  评论(0编辑  收藏  举报