2021.01.01【NOI2021冬令营】模拟赛 比赛总结

总结

第一次在纪中跨年。

今天早上本来打算 7 : 25 7:25 7:25 才起来的,闹钟都调好了。结果昨晚睡觉前没有关宿舍的灯的开关, 6 : 30 6:30 6:30 直接就被 灯光+铃声+晨歌 弄醒了……

到机房后切了昨晚的T1,然后做比赛。

T1

一开始看错题了,以为是求 A A A 有多少个子串可以由 B B B 的某个前缀经过若干操作得到。觉得可以 O ( ∣ A ∣ 2 ) O\left(|A|^2\right) O(A2) D P DP DP 过去。设 f i , j f_{i,j} fi,j 表示 A A A [ i , j ] [i,j] [i,j] 能否由 B B B 的前 j − i + 1 j-i+1 ji+1 个字符操作得到。

结果打完之后连样例都过不了……手玩一下才发现看错题了。

事实上,要计算的是 A A A 有多少个子串的某一个 子序列 可以由 B B B 整个串操作得到。

只要在上面的 D P DP DP 上略加修改就好了,设 f i , j , k f_{i,j,k} fi,j,k 表示 A A A [ i , j ] [i,j] [i,j] 能否由 B B B 的前 k k k 个字符操作得到。然后优化……不能优化吧。

时间复杂度为 O ( ∣ A ∣ 2 ∣ B ∣ ) O\left(|A|^2|B|\right) O(A2B) ,嗯,估计能拿到 60 60 60 分的好成绩。

T2

看起来不可做。估计是奇怪的 计数 + 数论 吧。

T3

弄了10分钟左右才搞明白 外向树 是什么意思:由有向边构成的,所有边的方向都是从父亲到儿子的有根树。

很容易发现最佳的遍历必定是根据 dfs序 由小到大跑的,因此设 f i , j , k f_{i,j,k} fi,j,k i i i 为根的子树中最多同时使用 j j j 个分身, i i i 的祖先中离 i i i 最近的分身点是 k k k 的最小时间。

转移有两种: i i i 这个点是否成为新的分身。还要考虑当走到儿子后不再上来时可能会删除一些上面的分身。

考场上没有调出来,痛失 60 60 60 分!


题解

T1

其实是可以优化的……

直接发现如果 D P DP DP 数组只存 0 / 1 0/1 0/1 的话就太浪费了,因此把 k k k 那一维变成 D P DP DP 数组的数值。

f i , j f_{i,j} fi,j 表示 A A A [ i , j ] [i,j] [i,j] 最多能由 B B B 的前多少个字符操作得到。

时间复杂度 O ( ∣ A ∣ 2 T ) O\left(|A|^2 T\right) O(A2T) ,因为还有一个 1 2 \frac{1}{2} 21 的常数,因此就 900 900 900 多毫秒卡过去了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值