4月记录

48.AT_arc064_d

对于任意本原回文串,如果长度为奇数,那么它的任意循环位移均不是回文串;如果长度为偶数,恰有一个循环位移同样为回文串。

还有一个回文串的所有循环节都是回文串。

我们对于最小循环节计数,就有 \(f_i=k^{\lceil\frac{i}{2}\rceil}-\sum_{j|i}f_j\)

49.AT_arc065_c

没见过的 trick,曼哈顿距离与切比雪夫距离的互相转化。

50.[ NOI --四十连测第六套 ]--T1--魔术

考虑添加限制后全部满足,那么不满足的情况有 \(0\) 种,等价于添加反限制后无解。

无解即出现了同点的强联通分量,情况一:两点已经右边,这时候再加一条即可。

情况二:\(a_p\to b_0 \not \to b_1 \to a_{p ^ 1}\)\(a_p \to b_1 \not \to b_0 \to a_{p ^ 1}\) 满足 \(a\) 互相无法到达,\(b\) 互相无法到达。

51.[ NOI --四十连测第六套 ]--T2--交友

容易对每个男生考虑其连向的点集合 \(S\)

新加一位,这个男生为 A,其他男生为 B\(S\) 中元素为 A,其他女生为 C(因为题目保证了女生互相联系)。

然后对男生女生分别加上其编号的二进制数,以男生为例,这个女生对应为应全填 C,这下是 \(n+2\log n\) 的。

发现若两个女生连向的集合不同,那么这两个女生再构造二进制前,编号已经不相同了。

所以可以想到对两侧分别合并联通块,满足同一联通块内的异侧集合相同,这样在构造二进制之前,联通块中所有相同,不同联通块的不同,再分别对每个联通块内部构造编号二进制。

以下视联通块个数少为左侧,左联通块数为 \(s1\),右边为 \(s2\),最大联通块大小分别为 \(mx1,mx2\),满足 \(s1+mx1-1\le n\)

根据构造次数为 \(\min(s1,s2)+\log(mx1)+\log(mx2)\),不难得到最劣情况下,除了最大联通块,其他大小都为 \(1\),满足 \(s1+mx1-1=n\)

对于第 \(0\) 位的问题,若左右侧联通块个数都不为 \(1\) 时无需构造。

\(s1=s2=1\) 时,这种情况容易处理。

  • 若右侧联通块 \(\max=1\),那么次数为 \(s1+1+\log(mx1)\le n+1+(\log(mx1)-mx1+1)\le n+2\)

  • 否则,次数为 \(s1+\log(mx1)+\log(mx2)\le s1+2\log(n+1-s1)\le n + 1 + 2\log(n+1-s1)-(n+1-s1)\le n + 2\)

发现上述情况当 \(mx1=mx2=3\)\(mx1=mx2=5\)\(s1+mx1-1=n\) 时,即联通块只有 \(mx1\) 和一堆 \(1\),才能取到 \(n+2\)

这是,例如当 \(mx1=3\) 时:

另一种情况同理。

52.[ NOI --四十连测第六套 ]--T3--命运 (待补)

53.AT_arc065_d

\(f_{i,j}\) 表示前 \(i\) 填了 \(j\) 位,考虑一下上下界即可。

或者 \(f_{i,j}\) 表示 \([l_i,r_i]\) 中填了 \(j\)\(1\)\([1,l_i)\) 已经确定的方案数。

54.AT_arc066_c

https://www.luogu.com.cn/article/v14t76vl

55.AT_arc066_d

无 code。

\(f_{i}\) 表示考虑了前 \(i\) 位的答案,发现是可以斜率优化的。

再考虑修改,点 \(i\) 不选择的答案容易计算。

若点 \(i\) 选择,需要考虑左右端点。

56.AT_arc067_c

设计 \(f_{i,j}\) 表示考虑了人数 \(\le j\) 的组,一共选了 \(j\) 人的方案数,转移容易。

考虑分治,维护 \(h1_i\) 表示考虑 \([l,mid]\) 的左端点,右端点为 \(i\) 时的答案,\(h2_i\) 同理,斜率优化容易处理,对单点修改的答案的转移就是前缀或后缀 \(\max\),维护凸包然后单调队列容易转移。

时间复杂度 \(\mathcal O(n\log n)\)

57.AT_arc067_d

维护 \(m\) 个单调栈,扫描线一下即可。

观察到最优点单调,证明:

考虑右端点 \(r\) 的最优端点 \(l\),那么对于 \(p<l\)\([p,r]\) 不优于 \([l,r]\),然后 \([p,r]\)\(\max\) 包含 \([l,r]\) 的,当 \(r\to r+1\) 时,\([l,r]\)\([p,r]\) 的减去的差不变,但是 \([l,r]\)\(\max\) 增长量 \(\ge\) \([l,r]\) 的,所以最优端点单调增。

考虑分治维护,每次暴力求中点即可。

再者是,单调栈求出每个点作为一个最大值时的左右端点的两个区间,二维矩阵加。

最后处理出矩阵查找最大值即可。

58.Codeforces Round 939 (Div. 2)

打出了真实水平。

CF1956C

对于 \(i\in[1,n]\),先填第 \(i\) 行,再填第 \(i\) 列,就能构造出最优情况了。

对于最终的矩阵,我们将 $f (x) $定义为大于或等于 \(x\) 的元素数。矩阵中所有元素的和是 $\sum _ { i = 1} ^ n f (i) $,因为值 \(x\) 的元素将在之前的公式中计算 \(x\) 的次数。

现在,我们证明 \(f (x) \le n ^ 2-(x-1) ^ 2\)

让我们重写这个问题,让它变得简单一点:

你有一个 \(n\) 乘以 \(n\) 的矩阵。在每个操作中,都可以在行或列中精确地将 \(x-1\) 单元格涂成白色,将 \(n-(x-1)\) 单元格涂成黑色。证明最多有 \(n ^ 2-(x-1) ^ 2\) 黑色单元格。

试图通过说明以加强结论:

对于任何大小为 \(n\) 乘以 \(m\) 的矩阵,每个操作都可以将一行绘制为 \(x\) 白色单元格和 \(m-x\) 黑色单元格,或者将一列绘制为 \(y\) 白色单元格和 \(n-y\) 黑色单元格。无论我们如何绘制,最终的矩阵将最多有 \(nm-xy\) 黑色细胞。

我们将用归纳法来证明这一点。

如果 \(x = m\)\(y = n\),结论成立。

否则,如果最后一个操作是绘制一行,那么该行具有正好 \(m-x\) 黑色单元格。并且,通过归纳,其他行将最多包含 \((n-1) m-x (y-1)\) 黑色单元格。在最后一步中绘制列也是类似的。

然后,我们证明了上述结论。

因为上面的构造最大化了每个 $f (x) $,所以这是最佳答案。

CF1956D

首先,若执行了长度为 \(len\) 的操作,那么数最大为 \(len\)

考虑最优解中每个区间的并,如果一个点所在区间的并为 \(len\),那么如果这个区间所有数都取得 \(len\),那么显然是最优的。

所以考虑对于一个区间将其所有数转化为 \(len\),可以先通过不超过 \(2\) 次操作将所有数变成 \(0\)

给出伪代码:

//! a function which sets a_1 ... a_k into k.
function solve(k):
  if k is 1:
    operate [1,1]
    return
  end if
  solve(k-1);
  for i in [k-2, ..., 1]:
    operate [1,i] //! this sets a_1 ... a_i into 0
    solve(i)
    //! here, a should be [i, i, ..., i, i+1, i+2, ..., k-1, 0]
  end for
  //! here, a should be [1, 2, 3, ..., k-1, 0]
  operate [1,k]
  return

CF1956E

four consecutive monsters have energy level \(x,y,z,w\ (x,y,z,w>0)\) and they did not die after \(t\) rounds of spells, then \(y\) will receive at least \(t\) points of damage, \(z\) will receive at least \((t-1) +(t-2)+\cdots=O(t^2)\) of damage, and \(w\) will receive at least \(O(t^3)\) of damage.

所以执行了 \(\sqrt[3]{V}\) 次后,序列中不存在连续 \(4\) 个数。

单独考虑每种长度即可,涉及到数学计算。

59.CF1787F

码量大,代码估了。

首先可以玩出奇偶长度的环的变换。

题目要求开始环数最少,考虑合并相同大小连通块。

考虑无解,最后偶数连通块必须一直合并,所以若有一个大小为 \(x\) 的偶环,那么一定得有 \(2^k\) 的倍数个大小为 \(x\) 的环,并且偶环的合并只涉及到偶环。

考虑分组,对于个数 \(\le 2^k\) 的部分就二进制分组,否则分成多个 \(2^k\) 即可。

60.AT_arc068_c

61.AT_arc068_d

题目问的显然是有多少个长度为 \(n\) 的排列,满足其可以被分成两个递减序列,然后乘上 \(2^{n-k-1}\),表示使得第 \(m\) 位为 \(1\)

由某个定理可得,其等价于不存在 \(3\) 三个递增的数,记为性质 \(A\)

这个 \(f(m)=1\) 太麻烦了,我们考虑 \(f\) 的反函数,\(p(f(i))=i\),根据函数与反函数的关系,\(f\) 具有性质 \(A\) 等价于 \(p\) 具有性质 \(A\)

于是问题转化为有多少个长度为 \(n\) 的排列,满足其可以被分成两个递减序列,使得第一位为 \(m\)

\(f_{i,j}\) 表示长为 \(i\) 的排列,第一位为 \(j\) 的方案数。

\(i=j\),则 \(f_{i,j}\gets \sum\limits_{k=1}^{j-1}f^{i-1,k}\)

\(j<i\),考虑第二位:

  • \(a_2=i\)\(f_{i,j}\gets f_{i-1,j}\)

  • \(j<a_2<i\),无解;

  • 否则 \(f_{i,j}\gets \sum\limits_{k=1}^{j-1}f^{i-1,k}\)

发现答案就是从 \((2,1)\) 走到 \((n,m)\),不越过 \(y=x\) 的线的方案数。

62.AT_arc072_c

63.AT_arc072_c

64.AT_arc075_d

65.CF794G Replace All

排除掉 \(S=T\) 的情况。

考虑 \(p\)\(q\) 之间的对应关系,发现 \(p,q\) 具有长度为 \(\gcd(|p|,|q|)\) 的周期。

简要证明:

弱周期定理:若字符串 \(s\) 具有长为 \(a\)\(b\) 的周期,且 \(a+b\le |S|\),那么 \(s\) 具有 \(\gcd(a,b)\) 的周期。

先去掉 \(s,t\) 相同的最长前缀和后缀,若 \(|p|>|q|\),那么就有 \(q\) 同时是 \(p\) 的前缀和后缀,于是 \(p\) 有长度为 \(p-q\) 的周期。

再考虑 \(p-q\) 这多出来的一部分,若 \(|p-q|<|q|\),那么 \(p-q\)\(q\) 的前缀,也是 \(p\) 的前缀。

那么后面多出来的也是 \(p-q\) 也是 \(p\) 的后缀,那么 \(p\) 有长度为 \(q\) 的周期,且 \(p-q+q\le p\),那么 \(\gcd(p-q,q)=\gcd(p,q)\) 的周期也是有的。

证毕。

由上,\(p,q\) 都可以表示为一个串循环若干次,那么 \(p+q=q+p\),于是我们只需要关注 \(|c_{s,A}-c_{t,A}|,|c_{s,B}-c_{t,B}|\),分别设为 \(dA,dB\),则有 \(dA\times p=dB\times q\),且 \(dA,dB\) 要么无零,要么两个都是零。

若两个都是零,那么 \(p,q\) 长度任意,方案数为:

\[\sum_{i=1}^{n}\sum_{j=1}^{n}2^{\gcd(i,j)} \]

根据莫比乌斯反演,容易线性求。

否则,有 \(\frac{dA}{dB}=\frac{q}{p}=\frac{a}{b}\),其中 \(a,b\) 为最简形式。

\(1\le\gcd(|p|,|q|)\le \min(\lfloor\frac{n}{a}\rfloor,\lfloor\frac{n}{b}\rfloor)\),当已知 \(dA,dB\) 时,方案数为:

\[\sum_{i=1}^{\min(\lfloor\frac{n}{a}\rfloor,\lfloor\frac{n}{b}\rfloor)}2^i \]

再看回原序列的方案数,不妨设 \(|c_{s,A}-c_{s,B}|=k\),那么方案数为:

\[\sum_{i}\binom{c_{s,?}}{i-c_{s,A}}\binom{c_{t,?}}{i-k-c_{s,A}} \]

这是个范德蒙德卷积的形式,容易化简。

66.[AGC001F] Wide Swap

考虑逆排列

67.AT_agc003_d

对质因数次数 \(\mod 3\) 之后的数即其关于 \(3\) 的对应数(这是唯一的),若他的数量 \(>\) 他对应数的数量,就加入他。

现在关键在于找对应值。

\(\mathcal O(\sqrt[3]{W})\) 删除一个数的立方因子后的数为 \(s1\),删去原数 \(\le \sqrt[3]{W}\) 后的数为 \(s2\)

\(s2\) 的不同质因子数量 \(\le 2\)
image

68.circle

曼哈顿距离有 \(4\) 种方向,相邻两个数有方向限制,dp 一下,可以解决某种排列下的最优解。

随机几次排列即可。

69.string

每种颜色只会进行操作 \(2\) 至多一次,且存在最优解先进行 \(2\) 再进行 \(1\)

计算每个点的最优出边。

不是每个联通块都是环,就是最优解。

否则,枚举断环的集合,以及新的出边,dp 即可。

70.如何证明李善兰恒等式?及其应用

https://www.zhihu.com/question/459956568

https://www.luogu.com/article/hi3ek1ck

71.【集训队作业2018】count

转化为笛卡尔树,满足叶子作为左儿子的次数最大值 \(\le m\)

二叉树转化为括号序列,节点包住左儿子,然后递归右儿子。

相当于前缀最大值 \(\le m\) 的括号序列个数。

折线容斥即可。

72.[AGC011E] Increasing Numbers

一个数是递增数当且仅当他能被至多 \(9\)\(111...\) 表示。

一个数 \(n\) 能被 \(k\) 个递增数表示当且仅当他能被至多 \(9k\)\(111...\) 表示。

列出式子:

\[n=\sum_{i=1}^{9k}111...(len=p_i)\\ \rightarrow n=\sum_{i=1}^{9k}\frac{10^{p_i}-1}{9}\\ \rightarrow 9n+9k=\sum_{i=1}^{9k}10^{p_i} \]

二分 \(k\),高精度计算 \(9n+9k\) 得出他的十进制表示是否 \(\le 9k\) 即可。

递增枚举 \(k\) 也行。

73.[AGC005F] Many Easy Problems

设当前考虑点集大小为 \(k\)

转化为对每个点考虑其被算进的方案数。

容斥成不被算进的方案数,则点集所有点在 \(u\) 的同一个儿子内,则:

\[ans_k=\binom{n}{k}-\sum_{u}\sum_{v\in son(u)}\binom{sz_{u,v}}{k}\\ =\binom{n}{k}-\sum_{j\ge i}\binom{j}{k}c_j\\ =\binom{n}{k}-\frac{1}{k!}\sum_{j=i}^{n}\frac{j!c_j}{(j-k)!}\\ =\binom{n}{k}-\frac{1}{k!}\sum_{j=0}^{n-k}\frac{(j+k)!c_{j+k}}{j!} \]

右边是一个差卷积,容易求出。

74.[AGC013C] Ants on a Circle

75.[AGC006D] Median Pyramid Hard

二分,转成 01 串,结论为相邻相同的最靠近中间的数。

posted @ 2024-04-08 13:35  蒟蒻orz  阅读(4)  评论(0编辑  收藏  举报