【题解】CF1997

A

  • 首先,插入的字符必须和左右两边的字符都不一样
  • 其次,对于插入位置的选择,显然最好插在两个一样的字符中间,如果没有一样的字符,插在最前面即可

B

  • 观察样例发现题目中要求的位置就在样例中
  • 手玩一下,尝试改变样例里那个形状,发现改变任何一个格子都不满足题意,所以得出结论:题目要求的位置当且仅当六个格子形如
...
*.*
  • 直接枚举每个位置即可

C

  • 首先,左括号为1,右括号为 -1,合法括号串显然满足前缀和非负
  • 在奇数位置上,前缀和总是二的倍数
  • 如果要尽量缩小匹配括号之间的距离,显然能早放右括号就早放右括号
  • 如果某个奇数位置的前缀和是 0,显然只能放左括号
  • 否则,一定会放右括号,这样做一定没有后效性:因为如果放的话,前缀和最少是 2,一定可以支持连续放两个右括号,然后就到下一个奇数位置了

D

  • 注意到 u 可以取到的最大值与子树内的最小值有关,考虑树形 DP
  • fu 表示 以 u 为根的子树内最小值的最大值
  • 容易列出转移:fu=min(minvu(fv),minvu(fv)a[u]2+a[u])
  • 对于叶子:fu=au
  • 对于根:fu=au+minvu(fv)

E

  • 容易发现:对于一个怪物,k 越大,越容易蘸豆,k 越小,越不容易蘸豆
  • 观察询问的形式,大胆猜想回复询问是 O(1) 的;而我们对于每个怪物 i,要计算出:k 至少为多少才能与这个怪物蘸豆
  • 考虑二分:设当前二分的值为 k,则不与当前怪物蘸豆的充要条件是:k×ai<=i
  • 注意到 i 难以快速求出,但注意到,我们在计算到 i 时,已经算出了与前 i1 个怪蘸豆所需的最小 k,于是我们可以使用树状数组快速求出 i
  • 时间复杂度 O(nlog2n)

F

  • 首先,你需要一点注意力,注意到:
    1. 所有操作可逆
    2. 所有筹码最后都可以变到第一个位置
    3. vi 表示第 i 个位置的一个筹码的价值,则 vi 是斐波那契数列
  • 显然对于一种若干筹码的放置方式,有且一种总价值和与之对应,即有且仅有一种 m 的值与其对应
  • 注意到 x 很小,考虑极端情况,在 x=10 的地方放了 1000 个筹码,这时取到最大理论价值:v10×1000v25
    也就是说,我们最多用到 x=25 这个位置
  • 注意到最大理论价值最多只有 55000 量级,我们考虑统计答案的方式:枚举每一个价值和 V,如果这个价值对应的最少筹码表示就是 m,则累加“用 n 个筹码摆出 V 的价值的方案数”
  • 现在的问题是,如何求 nV:显然考虑 DP
  • fx,i,j 表示用前 x 个位置,摆了 i 个筹码,摆出 j 的价值的方案数
  • 初状:fi,0,0=1
  • 转移:fx,i,j=fx1,i,j+fx,i1,jvx
  • 优化:显然可以滚掉第一维
posted @   yeyou26  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示