【补题】CF I

昨晚 CF 掉大分了。。。补一波以前比赛的题


CF745

D. Mathematics Curriculum

对于位置 i,包含 i 的区间中不同最大值个数可以拆分到 [1,i] 后缀最大值个数和 [i,n] 前缀最大值个数,等价于笛卡尔树上祖先个数(可以从构建笛卡尔树时单调栈的角度考虑)。
题目转化为求有多少种大小为 n 的笛卡尔树,根的深度为 1,深度为 m 的点数为 k

考虑 DP,设 f[i,j,k] 表示大小为 i 的笛卡尔树,深度为 j 的点数为 k 的个数,转移时把左右子树拼起来

f[i,j,k]ab(i1a)f[a,j1,b]×f[ia1,j1,kb[j=1]]

然而这个 DP 是 O(n5) 的,需要卡常

CF727

E. Game with Cards

考虑倒序 DP,设 f[i],g[i] 为第 i 张卡放左/右手,第 i+1 张放在另一只手是否可行,以转移 f 为例。f[i]=1 的条件为存在 j,使得 g[j]=1,第 i 张卡在 [i,j] 中可以一直呆在左手,[i+1,j] 中的卡都可以放在右手

容易发现只需要考虑满足 g[j]=1minj,时间复杂度 O(n)

  • 倒序
  • 贪心优化决策

F. Strange Array

精简一下奇异值的计算方式:对于 lir,记 x,y,z[l,r] 中小于、等于、大于 ai 的元素个数,那么 i 的奇异值为 max(y+zx2,x+yz12)(其实是把讨论 ai 与中位数的大小写成了 max 形式)

以计算 y+zx2 为例,可以以 i 为分界拆成两端,以 [l,i] 为例。把 ai 的元素记为 1>ai 的元素记为 1,那么 maxy+zx 即为 [1,i] 的最大后缀和

实现上可以从小到达计算每个数值,线段树维护每个元素与当前数值的大小关系。时间复杂度 O(nlogn)

  • 尝试精简题目给的计算方式而不是直接优化

CF725 (Div.3)

D. Another Problem About Dividing Numbers

一次除以 x 可以通过 y 次除以 x 的约数代替(x=pici,yci),简单算出上下界即可。需要特判 k=1

F. Interesting Function

考虑第 i 位,其变化次数为 r10il10i

  • 按位考虑

G. Gift Set

LG 题解区的 O(1) 做法:

xy,ab,那么答案一定是选若干个 (a,b),然后尽可能选 (a+b,b+a)(选两次,分别为 (a,b),(b,a)

显然我们想让选完 (a,b)x,y 尽量接近(否则选 (a,b),(b,a) 时会被浪费),那么选 (a,b) 的次数为 yxba,为避免特判,再算一下选 yxba+1 的答案

需要特判 a=b

  • 考虑等价情况/条件

CF705

E. Enormous XOR

大型分类讨论

  • l 最高位为 0 :答案为 2n+11。取 [2n1,2n] 即可
  • r 为奇数:答案为 r
    证明:归纳法。
    • 左端点 r2
      • 右端点 r2:答案最大为 r2
      • 右端点 =r1:如果答案 >r,则一定存在一位使得该位前 ansr 相同,该位 r0ans1。需使 [l,r1] 中该位出现奇数个 1,设最后一次出现 1mid,则 [l,mid],[mid+1,r] 中各有奇数个数(mid 在该位后都是 1r1 为偶数,可以看官方题解的图),总长为偶数,因此 ans 的最高为为 0,矛盾
      • 右端点 =r:答案为右端点 r2 的某个区间异或上 r1r=1,最大为 r+1
    • 左端点 >r2:显然为 r
  • r 为偶数:
    • lr2:答案为 r+1,由 [r2,r] 取到([l,r+1] 的答案为 r+1,因此 [l,r] 的答案不会更大)
    • l>r2:显然为 r

与官方题解的证明顺序不同,官方题解的略乱,但符合思考顺序

  • 打表,通过部分规律深入思考
  • 不要怕分类讨论,但要注意时间
  • 小数据测全(测了 l=0,r=1 没测 l=r=0

F. Enchanted Matrix

行列独立,关键在于求最小循环节/最大循环节数

LG 题解区做法:

最大循环节数一定是 n 的约数,依次考虑 n 的质因子 p。设当前循环节数为 k,那么只需要询问前 nk 列是否能分成 p 节,比较显然的想法是询问 [1,p1],[2,p] 是否相等,但本题要求矩形不交

  • p=2:直接询问即可
  • p>2p 为质数,因此一定为奇数。可以考虑设中间变量,分别比较 [1,p2],[p2+1,p1][1,p2],[p2+2,p],若都相等则合法

官方题解

CF702 (Div.3)

CF701

E. Move and Swap

确实比 F 难。

考虑 DP。首先蓝点与红点一定在同一层,且由于蓝点可以走到下一层任一点,因此只需要记录红点位置即可刻画出当前状态,设 f[u] 为红点在 u 时的最大值,转移时考虑是否交换:

  1. 不交换:红点直接从父亲走下来,蓝点走到当前层权值最大/最小的点
  2. 交换:蓝点变到 u,红点在这层任选,即为 f[fa[v]]+|a[u]a[v]|,拆开绝对值得到 max(max{f[fa[v]]a[v]}+a[u],max{f[fa[v]]+a[v]}a[u])
  • 从限制多/状态少的入手
  • |ab|=max(ab,ba)

F. Copy or Prefix Sum

哈希表被卡

CF700

E. Continuous City

Acfboy

显然要从二进制入手,但思考&实现细节都很多。也许可以先忽略点编号随便连边,然后拓扑排序?

  • 通过连一条 l1 的边可以把值域平移到 [1,rl+1]
  • 先解决 r=2k 的情况在尝试以此为基础扩展
posted @   401rk8  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示