Solution Set -「NOIP Simu.」20221113
\(\mathscr{A}\sim\) 游戏
Cover:「ARC 087E」Prefix-free Game.
Tags:「A.博弈-SG 函数」「A.数据结构-Trie」
想了半天 (\(\ge15~\text{min}\)) 怎么表述一堆字符串的前缀关系, 尝试发明一个数据结构 ... 我这不是个 Trie 吗? 乐.
建 Trie, 二人操作等价于在 Trie 上插入一个串, 并且要求串的末尾必须是新建的结点 (这样可能产生不合题意的前后缀关系, 但是此时 Alice Bob 在左右子树的选择是对称的, 可以忽略). 显然, 这些结点落在空子树内, 空子树间独立, 因此只需考察单个高度为 \(h\) (设单点高度 \(h=1\)) 的空子树情况.
打表发现, \(\text{sg}(h)=2^{\text{low}(h)}\), 异或判全局 SG, \(\mathcal O(\sum|S_i|)\) 结束. 归纳可证.
\(\mathscr{B}\sim\) 翻转
Cover:「CF 1630D」Flipping Range.
Tag:「C.性质/结论」
这题不简单啊 ... 恐怕又是什么常见结论重新推了一遍, 导致做得不快.
首先观察到, 若有长度为 \(l_1,l_2~(l_1<l_2)\) 的翻转区间, 则一定能够获得长度为 \(l_2-l_1\) 的翻转区间. 这是因为利用 \(l_2\le\lceil n/2\rceil\) 的性质, 我们可以用一个 \(l_1\) 和一个 \(l_2\) 组合出任意位置开始的 \(l_2-l_1\). 进一步, 这是更相减损, 因此我们的实际可翻转区间长度就是 \(l=\gcd\{b_i\}\).
但是, 这个区间翻转也很麻烦, 直接 DP 状态量也很庞大, 怎么办呢?
我的赛上思路: 如果把翻转位置考虑作 \(01\) 向量, 我们有 \(n-l+1\) 个可用向量, 它们显然线性无关, 最终可能的符号序列对应于向量张成空间内的元素. 我们现在的问题是向量 "\(1\) 太多", 翻转量大, 不好算. 那 ... 直接让相邻两个向量加一加? 得到 \(n-l\) 个形如 \([0,\dots,0,1,0,\dots,0,1,0,\dots,0]\) (中间一段有 \(l-1\) 个 \(0\)) 的向量. 空间少了一维? 最后补上 \([0,\dots,0,1,\dots,1]\) 就能得到一样的张成空间. 由于张成空间相同, 这两组向量对应的最优解是相同的. 我们暴力枚举 \([0\dots,0,1,\dots,1]\) 用或者不用, 其他 \(n-l\) 个向量的影响对于下标\(\bmod l\) 是独立的, 这就很好 DP 了.
有点机械, 但确实很长. 不过\(\bmod l\) 这个结论后来想着组合意义还是比较明显的. 可能直接一步到位会更快一点吧.
总之, DP 一下就能 \(\mathcal O(n)\) 求解了. 瓶颈竟然是求 \(\gcd\) 的 \(\log\).
\(\mathscr{C}\sim\) 食尸鬼 *
Cover:「牛客 11251F」小红的食尸鬼.
Tags:「A.DP-动态 DP」「A.数据结构-线段树」
你要说我没做出来吧, 我很早就想到正解做法, 然后发现有 \(30\) 多种情况的表要打就想别的结论去了 ...
这题算个广义 DDP, 也就是以函数嵌套的形式构造有结合律的状态, 然后再用数据结构维护的 DDP. 注意到连续的亡语爆炸几乎就把随从炸平了, 因而 \(\ge3\) 个的随从不会对爆炸状态产生影响. 对于每种输入类型, 一个区间需要维护出: 输出类型, 内部伤害, 存活随从数量, 对随从的伤害总数, 每种输入随从可额外造成的伤害一共 \(1+1+3+1+3=9\) 个信息. 这还没完, 有 \(11\) 种输入类型, 还需要对 S, H, A 分别写出转移信息组. 填写总共 \(9\times11\times3=297\) 个常量后就能愉快 DDP 啦! 复杂度大常数 \(\mathcal O(n+q\log n)\).
\(\mathscr{D}\sim\) 计数 *
Cover:「ARC 086F」Shift and Decrement.
Tags:「C.思维」「C.性质/结论」
自从缩紧了“思维”这个 tag 的使用限制, 这样的死亡 tags 组合真的很少出现了. (
一个 key observation 是在最后一次 \(/2\) 之前的其他 \(/2\) 不用下取整. 因此, 前面的 \(/2\) 和 \(-1\) 可以一起打包为 \(-p=\sum p_i2^i\). 如果一个位置 \(p_i>1\) 显然浪费了操作次数.
也就是说, 在 \(k\) 步以内, 假设总 \(/2\) 次数 \(w\) 已知, 我们可以:
- 选一个 \(p<2^w\), 用 \(\text{count}(p)+w-1\) 次操作令 \(a_i\gets (a_i-p)/2^{w-1}\).
- 用 \(1\) 次操作, 令 \(a_i\gets\lfloor a_i/2\rfloor\).
- 用 \(x\) 次操作, 令 \(a_i\gets a_i-x\).
直接枚举 \(w\) 吧, 注意第二步的取整与 \(a\) 的奇偶性有关. 设 \(c_i=a_i\bmod{2^w}\), 这就和 \(p\) 与 \(c_i\) 的大小关系有关. 再枚举 \(p\) 与所有 \(c\) 的大小关系, 贪心地在大小关系不变的区间 \([l,r]\) 内选择一个 \(\text{popcount}\) 最小的数 (这个可以 \(\mathcal O(1)\) 算啊, 我看有老哥写个数位 DP). 现在前两步的操作次数及其结果全被枚举出来了, 剩下 \(x\) 的范围自然也能求出来. 为了去重, 记录排序后的差分数组 \([a_2-a_1,a_3-a_2,\cdots]\) 一定时可能的 \(a_1\) 的区间集合, 对每种差分数组的区间求并再求长度和就是答案. 随便写写可以做到 \(\mathcal O(n^2\log V\log n)\).
Solution Set -「NOIP Simu.」20221113的更多相关文章
- 「NOIP 2017」列队
题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人 ...
- 「NOIP 2020」微信步数(计数)
「NOIP 2020」微信步数(Luogu P7116) 题意: 有一个 \(k\) 维场地,第 \(i\) 维宽为 \(w_i\),即第 \(i\) 维的合法坐标为 \(1, 2, \cdots, ...
- Diary / Solution Set -「WC 2022」线上冬眠做噩梦
大概只有比较有意思又不过分超出能力范围的题叭. 可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics 任意一个 ...
- Solution Set -「ARC 107」
「ARC 107A」Simple Math Link. 答案为: \[\frac{a(a+1)\cdot b(b+1)\cdot c(c+1)}{8} \] 「ARC 107B」Quadrup ...
- 「NOIP 2013」 货车运输
题目链接 戳我 \(Solution\) 这一道题直接用\(kruskal\)重构树就好了,这里就不详细解释\(kruskal\)重构树了,如果不会直接去网上搜就好了.接下来讲讲详细过程. 首先构建\ ...
- Solution Set -「ABC 217」
大家好屑兔子又来啦! [A - Lexicographic Order] 说个笑话,\(\color{black}{\text{W}}\color{red}{\text{alkingDead} ...
- Note -「动态 DP」学习笔记
目录 「CF 750E」New Year and Old Subsequence 「洛谷 P4719」「模板」"动态 DP" & 动态树分治 「洛谷 P6021」洪水 「S ...
- Note -「Lagrange 插值」学习笔记
目录 问题引入 思考 Lagrange 插值法 插值过程 代码实现 实际应用 「洛谷 P4781」「模板」拉格朗日插值 「洛谷 P4463」calc 题意简述 数据规模 Solution Step 1 ...
- Solution -「ARC 104E」Random LIS
\(\mathcal{Description}\) Link. 给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...
- LOJ #2026「JLOI / SHOI2016」成绩比较
很好的锻炼推柿子能力的题目 LOJ #2026 题意 有$n$个人$ m$门学科,第$ i$门的分数为不大于$U_i$的一个正整数 定义A「打爆」B当且仅当A的每门学科的分数都不低于B的该门学科的分数 ...
随机推荐
- Docker-compose 常用命令和模板
docker-compose logs -f ##查看该容器的启动的日志打印(日志从头打印 docker logs -f container_id ##查看某一容器的启动的日志打印(日志从头打印) d ...
- 关于如何更改Cuda的版本的一些事情
1. 网上说的很全面了,这里我把我遇到的一些问题和解决方案罗列出来,以便未来的学习和了解. 博客的好处就体现出来了,下次你再用这个东西,就直接打开你的博客照抄就行了,不用东搜西搜了,及其方便,这种碎片 ...
- manim边学边做--三维的点和线
Manim 提供了一系列专为三维空间设计的对象,让创建三维数学动画变得更加轻松. 本篇开始介绍其中最简单的点和线相关对象,也就是Dot3D(三维的点),Line3D(三维的线)和Arrow3D(三维的 ...
- 开源 - Ideal库 -获取特殊时间扩展方法(四)
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法. 01.获取当前日期所在月的第一个指定星期几 该方法和前面介绍的获取当前日期所在周的第一天(周一)核心思想是一样的,只是把求周一改成求周几而 ...
- n皇后编程问题
n皇后编程问题是一个经典问题,记得2018年北京航空航天大学计算机学院的博士招聘的上机题目就是这个,这里给出几种实现方法: import time import itertools Num = 8 # ...
- TSCTF-J2024 密码向WP(5/8)
ezRSA part 1 #part1 p = getPrime(512) q = getPrime(512) n = p * q phi = (p-1) * (q-1) d = getPrime(2 ...
- Vue 实现图片下拉选择控件
element-ui 的组件库中没有图片下拉选择组件,基于 el-select 组件做的改动并不能完全满足需求,因此决定重写一个. 从头到尾做下来收获很多,我决定把实现过程中遇到的问题记录一下. 效果 ...
- Linux中vim快捷键+vim报错解决
vim快捷键+vim报错解决 vim 快捷键 编辑器 yum -y install vim 快捷键: 视图模式: 0 Home ^ 快速移动光标到行首 $ End 快速移动光标到行尾 u 撤销 ...
- 内网穿透之frp
官网文档:https://gofrp.org 1 Frp介绍frp 是一个开源.简洁易用.高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议.frp 项目官网是 h ...
- 论文解读《Neural Cleanse: Identifying and Mitigating Backdoor Attacks in Neural Networks》
发表时间:2019 期刊会议:IEEE Symposium on Security and Privacy (S&P) 论文单位:UC Santa Barbara 论文作者:Bolun Wan ...