杂题记录

130668041_p0

[↑] 速速加入鸥盟(pid=130668041)。

什么都吃只会使我营养均衡。

查询AtCoder补题:https://kenkoooo.com/atcoder/#/table/


agc001_d

题目描述

有两个正整数序列\(a\)\(b\)组成的,它们满足以下所有性质:

  • \(a\) 中所有元素之和为 \(N\)

  • \(b\) 中所有元素之和为 \(N\)

  • 任何长度为 \(N\) 且满足以下条件(1)和(2)的字符串 \(S\) ,必然同时满足条件(3):

    • (1) 由前 \(a_1\) 个字母、接下来的 \(a_2\) 个字母、再接下来的 \(a_3\) 个字母……构成的每个子串都是回文串

    • (2) 由前 \(b_1\) 个字母、接下来的 \(b_2\) 个字母、再接下来的 \(b_3\) 个字母……构成的每个子串都是回文串

    • (3) 所有 \(N\) 个字母完全相同,即 \(S_1=S_2=\dots=S_N\)

我们只知道打乱序列 \(a\) 之后的另一个序列 \(A\)

现在需要你构造出一组满足上述性质的 \(a\)\(b\)

\(1\le N\le 10^5,1\le M\le 100,1\le A_i\le 10^5\)

Generated by DS.

题目解法

每给出的一个回文信息 \(a_i\) 相当于给原序列连了 \(\lfloor\frac{a_i}{2}\rfloor\) 条边,这样转化后,我们发现第一个性质。

性质 1 :这样对合法的 \(a,b\) 连边后,整张图会变成一个含有 \(N\) 个点的链或是环,同时每个合法的 \(a,b\) 与这样的环或链形成双射。
证明:感性理解,因为连边代表的是建立相等关系,而全部点相等的充要条件就是这个图形成了 \(N\) 个点的连通块。
很显然每组回文关系最多只能给区间内的点都加 \(1\) 的度数,仅考虑 \(a\) 那么每个点的度数最多为 \(1\) ,算上 \(b\) 则每个点的度数至多为 \(2\) ,因此它是环或链。

也就是说每个合法方案形成的图只能是环或链,这要求我们 \(a_i,b_i\) 中只能有 \(0\)\(2\) 个奇数,因此如果 \(A\) 中有 \(>2\) 个奇数则可以直接判无解。

对于 \(a_i\) 为偶数的情况,我们发现可以错一位将其拉成一条链。举个例子,\(a_i=6\) 时,原边是 \((1,6),(2,5),(3,4)\) ,而新加边为 \((2,7),(3,6),(4,5)\) ,整个边就能串成两端分别为 \(1,7\) 的链。

\(a\) 中奇数个数分类讨论:

  • \(a\) 中没有奇数,按照上述方法直接构造,即 \(b=\{1,a_1,a_2,\cdots,a_{m-1},a_{m}-1\}\)

  • \(a\) 中有一个奇数,把这个奇数放在末尾,然后直接构造,即 \(b=\{1,a_1,\cdots,a_{m-1},a_m-1\}\)(诶怎么是一样的)。

  • \(a\) 中有两个奇数,把两个奇数一个放开头,一个放结尾,然后构造 \(b=\{a_1+1,a_2,\cdots,a_{m-1},a_m-1\}\)

注意要特判一下 \(a_m=1\) 的情况。

代码

Submission - 68855934

Completed on 20250828.

P11025

题目描述

构造有 \((N+1)\times (M+1)\) 个格点的网格生成树,最小化水平或垂直切割后的最大连通块数。

\(N,M\le1000\)

Generated by DS.

题目解法

由于这是一棵生成树,要求连通块数量最小本质上就是要求割掉的边最小。

考虑构造题一般套路:计算答案下界,这棵生成树总共有 \((NM+N+M)\) 条边,我们希望无论在哪一行哪一列割掉的边数尽可能平均,因此可以算得答案下界为 \(\lceil\dfrac{NM+N+M}{N+M}\rceil=\lceil\dfrac{NM}{N+M}\rceil+1\)

我们优先处理掉最后的 \(+1\) ,只需要将最后一行一列连起来即可。现在只需要考虑前 \(N\times M\) 的格点的连接情况。

这里有个性质,似乎很通用:

性质 1 :任何一个网格图,对于每个格点向下或向右连边,最后形成的一定是一棵树。
证明:瞪眼法,感性理解均不难。

这下我们可以随便连边啦。

定义每行每列连边的基准数量为 \(d=\lceil\dfrac{NM}{N+M}\rceil\)

然后每行的「选[↓]区间」随行数增加往右边滑动即可,最后建出来的图(\(N=4,M=3\))如下:

o  o  o--o
|  |     |
o  o--o  o
|     |  |
o--o  o  o
   |  |  |
o  o  o--o
|  |     |
o--o--o--o

代码

R233566735

Completed on 20250828.


P11306

题目描述

维护一棵 \(n\) 个点的二叉树,每个点有权值 \(a_i\)。支持 \(m\) 次操作,每次修改一个点的权值。每次操作后,查询树中满足其子树是二叉搜索树的节点个数。

\(1 \leq n, m \leq 2 \times 10^5,0 \leq a_i, v \leq 10^9\)

Generated by DS.

题目解法

二叉搜索树太难打了,我们称满足子树为二叉搜索树的点 \(u\) 合法 。

首先可以发现,若一个点合法,则它子树中所有点都合法。对于这种东西的求法无非就是性质、容斥、标记或算影响。

这道题我们考虑性质,二叉搜索树的一大性质就是中序遍历不降

另一个性质则很显然:一棵子树的中序遍历是整棵树中序遍历的一块连续段

因此我们预处理出这棵树的中序遍历,记下每个点在中序遍历中的位置以及子树的 \(L,R\)

使用树状数组维护 \(a_i>a_{i+1}\) 的对数。

考虑修改,修改只会对祖先链上的信息有影响。同时注意到祖先链上的点是否合法是单调的,倍增跳祖先链修改即可。

代码

可以在代码里做一些有意思的区分来减少混用编号的错误,比如用 \(u,x\) 分别表示原编号和DFN编号。

R233597244

Completed on 20250828.


P11014

题目描述

给定序列 \(w_1, w_2, \ldots, w_n\) ,对于每个 \(i\)(从 \(2\)\(n\) ),计算期待值 \(m_i\) 为:

\[m_i = \max_{1 \leq j < i} \left\{ \frac{m_j}{a(\operatorname{lcm}(w_i, w_j)) + a(\gcd(w_i, w_j))} + k \right\} \]

其中函数 \(a(x)\) 定义为 \(x\) 的不同质因子的和(即 \(a(x) = \sum_{\substack{p \mid x \\ p \text{ prime}}} p\) ,且 \(a(1) = 0\) )。初始期待值 \(m_1\) 给定,求总和 \(\sum_{i=1}^{n} m_i\)

\(1 \le n \le 182376,1 \le m_1 \le 10^7,0 \le k \le 10^6,2 \le w_i \le 182376\)

Generated by DS.

题目解法

我的思路

原式就是一个DP转移的形式,可以用李超树优化做,但问题在于分母的部分不太好拆贡献。

对于李超树,维护的是 \(kx+b\) 的形式,\(k=m_j\times?,b=?,x=?\) ,问题还是在分母。

注意到分母是 \(w_i,w_j\) 两个数的质因数的交+并,但仍然没有好的东西去维护它。

拆牛魔的贡献,直接倒一下就做完了。。。

\[\begin{aligned} f_i&=\max_{j=1}^{i-1}\left\{\dfrac{f_j}{a(\operatorname{lcm}(w_i,w_j))+a(\operatorname{gcd}(w_i,w_j))}+k\right\}\\ &=\max_{j=1}^{i-1}\left\{\dfrac{f_j}{a(\operatorname{lcm}(w_i,w_j))+a(\operatorname{gcd}(w_i,w_j))}\right\}+k\\ &=\min_{j=1}^{i-1}\left\{\dfrac{a(\operatorname{lcm}(w_i,w_j))+a(\operatorname{gcd}(w_i,w_j))}{f_j}\right\}^{-1}+k\\ &=\min_{j=1}^{i-1}\left\{\dfrac{a(w_iw_j)+a(\operatorname{gcd}(w_i,w_j))}{f_j}\right\}^{-1}+k\\ &=\min_{j=1}^{i-1}\left\{\dfrac{a(w_i)+a(w_j)}{f_j}\right\}^{-1}+k\\ &=\min_{j=1}^{i-1}\left\{\dfrac{a(w_i)}{f_j}+\dfrac{a(w_j)}{f_j}\right\}^{-1}+k\\ \end{aligned} \]

\(k=\dfrac{1}{f_j},b=\dfrac{a(w_j)}{f_j},x=a(w_i)\) ,直接上李超树辅助转移即可。

代码

这题看似正常的 \(10^{-6}\) 精度,但实际上有很多取倒数的操作,实际的精度需要 \(eps\le 10^{-18}\) ,以后狠狠在这种问题上卡别人精度。

R233606657

Completed on 20250828.


P4142

题目描述

给定一个 \(N \times N\) 的网格,每个格子 \((X, Y)\) 的不稳定度 \(V_{X,Y}\) 满足:若 \(X + Y\) 为奇数,则 \(V_{X,Y} \geq 0\);若 \(X + Y\) 为偶数,则 \(V_{X,Y} = 0\)。有 \(M\) 个 L 型柱子,每个柱子覆盖三个格子(一个拐角格和两个相邻格),放置后拐角格的不稳定度降为 \(0\)。有 \(K\) 个格子已塌陷,无法放置柱子。求在放置最多 \(M\) 个柱子后,剩余不稳定度的最小值。

\(1 \le N \le 50, 0 \le M \le \left\lfloor \frac{N^2}{3} \right\rfloor, 0 \le K \le N^2, 0 \le V_{X,Y} \le 10^6\)

Generated by DS.

题目解法

题目已经提示我们要黑白染色了,我们不妨钦定 \(X+Y\) 为奇数的格子是黑色的,其余为白色的。

很显然,我们最后放的格子一定都是黑色的,否则只会占用空间而对答案没有贡献,而一个黑色的格子可以匹配上两个白色格子(L型)。

考虑再对白色格子分类,其可以按照是否在奇数列分为两类,一个黑点会从它周围的两类白色点中各取一个,不难发现这样一定可以形成L型。

再次定义在奇数列的白色点为 \(A\) 点,在偶数列的白色点为 \(B\) 点,黑色点为了统一我们叫 \(C\) 点。直接上费用流,考虑如何建图。

为了保证每个 \(C\) 点的费用只被计算一次,我们把所有 \(C'\) 类点拆开,把图分为 \(4\) 层。

  • \(0\rightarrow1\) 层:源点 \(S\) 向所有 \(A\) 类点连一条流量为 \(1\) ,费用为 \(0\) 的边。

  • \(1\rightarrow2\) 层:所有 \(A\) 类点向所有相邻的 \(C\) 类点连一条流量为 \(1\) ,费用为 \(0\) 的边。

  • \(2\rightarrow3\) 层:所有 \(C\) 类点向另一半 \(C'\) 类点连一条流量为 \(1\) ,费用为 \(-w\) 的边。

  • \(3\rightarrow4\) 层:所有 \(C'\) 类点向所有相邻的 \(B\) 类点连一条流量为 \(1\) ,费用为 \(0\) 的边。

  • \(4\rightarrow5\) 层:所有 \(B\) 类点向汇点 \(T\) 连一条流量为 \(1\) ,费用为 \(0\) 的边。

  • 注意以上所有点均排除了删掉的点。

但是我们还不能直接跑最小费用最大流,因为我们压根不需要流量最大(也就是柱子越多不一定越好),所以跑费用流时见好就收即可。

还有注意一下求出来的是最大可以消掉的不稳定度的相反数,最后输出要用 \(sum+MCMF\)

代码

R234077698

Completed on 20250902.


agc001_e

题目描述

给定 \(N\)\((A_i,B_i)\) ,求下面表达式的值.

\[\sum_{i=1}^{n}\sum_{j=i+1}^{n}\binom{A_i+B_i+A_j+B_j}{A_i+A_j} \]

\(1\le N\le 2\times 10^5,1\le A_i,B_i\le 2000\)

题目解法

单纯对原式求值是 \(O(n^2)\) 的,无法接受。

发现 \(A_i,B_i\le 2000\) ,很怪异。考虑从组合数处下手,观察到组合数形式为 \(\binom{a+b}{a}\) ,这种样子的组合数我们在求网格图上的路径走法时见过,表示从 \((0,0)\) 走到 \((a,b)\) 的方案数。

上面的东西可以通过DP进行一个 \(O(m^2)\) 的预处理,但是查询时还是得枚举 \(i,j\) 再求值,无法拆开求值。

引入人类智慧,拎出原式的组合数 \(\binom{A_i+B_i+A_j+B_j}{A_i+A_j}\) ,其表示从 \((0,0)\) 走到 \((A_i+A_j,B_i+B_j)\) 的方案数。考虑平移两个坐标,使上面的含义变为从 \((-A_i,-B_i)\) 走到 \((A_j,B_j)\) 的方案数。这么干我们就可以一开始将 \((-A_i,-B_i)\) 的方案数赋值为 \(1\) ,最后再 \((A_i,B_i)\) 收集答案并求和。

额外需要注意的是要从最后答案抠掉从 \((-A_i,-B_i)\) 走到 \((A_i,B_i)\) 的方案数,以及 \(i,j\) 交换顺序的情况(即 \(\times\frac{1}{2}\) )。

代码

Submission - 69000358

Completed on 0902.


agc001_f

题目描述

有一个长度为 \(N\) 的排列 \(P\) 。每次操作选择一组 \(i,j\) ,满足 \(1\le i<j\le N,j-i\ge K,|P_i-P_j|=1\) ,交换 \(P_i,P_j\) 。求进行若干次操作后字典序最小的序列。

\(2\le N\le 5\times 10^5,1\le K\le N-1,1\le P_i\le N\)

题目解法

因为 \(j-i\ge K\) 的限制难以处理,先将排列 \(P\) 置换一下,令 \(Q_{P_i}=i\) ,得到排列 \(Q\)

此时题目限制转化为选择相邻两个数,要求 \(|Q_i-Q_{i+1}|\ge K\) 才可以交换。过程类似于冒泡排序,可以 \(O(n^2)\) 做。

这样显然过不了,考虑能否使用归并排序。假设后半部分当前的数是 \(x\) ,那么当且仅当前半部分未添加的数 \(y\) 全部满足 \(y-x\ge K\) 时才可以交换。

这里去掉绝对值符号是因为由于字典序最小的要求,使得必须要 \(y>x\) 才是最优的;否则我可以先无条件选前半部分直到 \(y>x\) 成立。

该做法正确性证明:对于本题归并做法正确性的证明以及一个可能的误区

需要注意该题的另一种做法是

代码

Submission - 69017593

Completed on 0903.


P2177/P4330

题目描述

给定一个 \(N\times M\)\(01\) 矩阵,求最大的正方形子矩阵边长满足该子矩阵旋转 \(180\degree\) 后仍为自身。

\(0< N,M \le 300\)

题目解法

二维哈希,知道有这么个东西就行,这个自己推起来还是很简单的。

注意行和列的 \(B\) 要取不同的值,不然正确率会大打折扣。

代码

P2177:R234170409

P4330:R234170435

两份代码实际上没有区别。

Completed on 0903.


P7639

题目描述

给定 \(N,M,K\) ,你需要在 \(N\times M\) 个方格中划分出若干矩形,要求每个矩形至少有一条边贴住大矩形边框,同时定义 \(a\times b\) 矩形的代价为 \((a\times b-K)^2\) ,一种划分方案的代价为其中所有矩形的代价和。求出划分这个矩形的最小代价。

\(1\le N,M\le 300,1\le K\le 10000\)

题目解法

前置题目:P4160

类似的思路进行搜索,但需要额外记录当前矩形哪些边贴在边框上,然后上个记忆化搜索即可。

注意到一个矩形怎么旋转、翻转答案都不会变,随便考虑其中的几种情况剪个枝就能过。

进行一个枝的剪(?

代码

R234811482

Completed on 0909.


8227

题目描述

题目解法

代码

Completed on .


ProblemID

题目描述

题目解法

代码

Completed on .


posted @ 2025-08-28 14:34  LynxCat  阅读(10)  评论(0)    收藏  举报