think-cell Round 1 题解 (A~F)

think-cell Round 1 .

目录

A. Maximise The Score

排序后输出所有奇数位之和 .

B. Permutation Printing

1,n,2,n1 .

C. Lexicographically Largest

注意到对于一个 ai 来说 [ai+1,ai+i] 中的所有数都可以被选中,那么问题变给若干区间,每个区间选一个数要求组成的集合字典序最大 .

从大到小扫描每次能选则选即可 . 具体实现中可以按右端点排序扫一遍依次检查能不能选当前区间 .

D. Sum over all Substrings

注意到对于一个 p-good 的串 q,如果 qi=1 那么它可以提供 pi1,pi,pi+1 作为 1 的区间,这样隔 3 个放一个则可以知道对于一个不包含 000 的段来说其答案就是 len3 . 暴力计算每一个子区间的答案即可通过 Easy Version .

对于 Hard Version,令 dpi 表示 [i,n] 所有前缀的答案,考虑在开头加一个字符的影响:

  • pi=0:并没有什么影响,dpi=dpi+1 .
  • pi=1:可以设置 qi+1=1 来覆盖当前位,dpi=dpi+3+(ni+1) .

那么就 Θ(n) 解决问题了 .

E. 2..3...4.... Wonderful! Wonderful!

考虑如何判定一种最终局面能否被达成,考虑用一个长度为 n 的 01 串 s 表示,其中 si=0 则表示最终的序列中保留 i,反之则是 i 被删除 .

断言:s 合法当且仅当 si 中存在一个 0 使得左右都有至少 k 个 1 且 1 的个数是 2k 的倍数 .

证明:

  • 如果这个 0 左右都有 k 个 1,直接操作一次即可 .
  • 如果 s 中共有 4k 个 1,以 1 多的一侧中中的某个 1 为中心操作一次即可归约至上一个情况 .
  • 其他情况,在某一侧随便只用 1 操作一次即可让对应侧 1 的个数减 2k,不断进行操作即可归约至上一个情况 .

从而证明完毕 .

那么枚举 k 和剩下的元素数量 x,单步容斥然后插板即可得出方案数为 (nx)(x+2k1x),可以简单计算 . 因为总枚举量是调和级数的所以时间复杂度为 Θ(nlogn) .

F. Maximize the Difference

先考虑如何计算 f(b),固定 max 和 min 的取值 bi,bj 后考察 maxx{(biorx)(bjorx)},按位考虑,不难发现只有 bi 对应位为 0、bj 对应位为 1 时或 x 这个操作才可能产生贡献,那么可以得到此时的答案就是 biand~bj,其中 ~xx 按位取反后的值 .

那么就是要支持末尾插入,查询 maxi,j{biand~bj} . 考虑到 n 有限制,维护集合 A,B 表示当前的 bi~bi 二进制下所有子集组成的集合 . 每次插入的时候动态维护 A,B,均摊下来最多进行 n 次插入,插入的时候动态维护 AB 中元素的最大值即可 .

时间复杂度 O(n+q) .

posted @   yspm  阅读(439)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2023-02-18 「解题报告」AHOI2022 排列
2022-02-18 丽泽普及2022交流赛day21 社论
😅​
点击右上角即可分享
微信分享提示