4月记录

48.AT_arc064_d

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

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

我们对于最小循环节计数,就有 fi=ki2j|ifj

49.AT_arc065_c

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

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

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

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

情况二:apb0b1ap1apb1b0ap1 满足 a 互相无法到达,b 互相无法到达。

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

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

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

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

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

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

以下视联通块个数少为左侧,左联通块数为 s1,右边为 s2,最大联通块大小分别为 mx1,mx2,满足 s1+mx11n

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

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

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

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

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

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

这是,例如当 mx1=3 时:

另一种情况同理。

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

53.AT_arc065_d

fi,j 表示前 i 填了 j 位,考虑一下上下界即可。

或者 fi,j 表示 [li,ri] 中填了 j1[1,li) 已经确定的方案数。

54.AT_arc066_c

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

55.AT_arc066_d

无 code。

fi 表示考虑了前 i 位的答案,发现是可以斜率优化的。

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

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

56.AT_arc067_c

设计 fi,j 表示考虑了人数 j 的组,一共选了 j 人的方案数,转移容易。

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

时间复杂度 O(nlogn)

57.AT_arc067_d

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

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

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

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

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

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

58.Codeforces Round 939 (Div. 2)

打出了真实水平。

CF1956C

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

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

现在,我们证明 f(x)n2(x1)2

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

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

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

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

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

如果 x=my=n,结论成立。

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

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

因为上面的构造最大化了每个 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 (t1)+(t2)+=O(t2) of damage, and w will receive at least O(t3) of damage.

所以执行了 V3 次后,序列中不存在连续 4 个数。

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

59.CF1787F

码量大,代码估了。

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

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

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

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

60.AT_arc068_c

61.AT_arc068_d

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

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

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

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

fi,j 表示长为 i 的排列,第一位为 j 的方案数。

i=j,则 fi,jk=1j1fi1,k

j<i,考虑第二位:

  • a2=ifi,jfi1,j

  • j<a2<i,无解;

  • 否则 fi,jk=1j1fi1,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 的情况。

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

简要证明:

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

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

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

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

证毕。

由上,p,q 都可以表示为一个串循环若干次,那么 p+q=q+p,于是我们只需要关注 |cs,Act,A|,|cs,Bct,B|,分别设为 dA,dB,则有 dA×p=dB×q,且 dA,dB 要么无零,要么两个都是零。

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

i=1nj=1n2gcd(i,j)

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

否则,有 dAdB=qp=ab,其中 a,b 为最简形式。

1gcd(|p|,|q|)min(na,nb),当已知 dA,dB 时,方案数为:

i=1min(na,nb)2i

再看回原序列的方案数,不妨设 |cs,Acs,B|=k,那么方案数为:

i(cs,?ics,A)(ct,?ikcs,A)

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

66.[AGC001F] Wide Swap

考虑逆排列

67.AT_agc003_d

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

现在关键在于找对应值。

O(W3) 删除一个数的立方因子后的数为 s1,删去原数 W3 后的数为 s2

s2 的不同质因子数量 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

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

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

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

折线容斥即可。

72.[AGC011E] Increasing Numbers

一个数是递增数当且仅当他能被至多 9111... 表示。

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

列出式子:

n=i=19k111...(len=pi)n=i=19k10pi199n+9k=i=19k10pi

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

递增枚举 k 也行。

73.[AGC005F] Many Easy Problems

设当前考虑点集大小为 k

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

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

ansk=(nk)uvson(u)(szu,vk)=(nk)ji(jk)cj=(nk)1k!j=inj!cj(jk)!=(nk)1k!j=0nk(j+k)!cj+kj!

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

74.[AGC013C] Ants on a Circle

75.[AGC006D] Median Pyramid Hard

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

posted @   蒟蒻orz  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示