ZROI 19.08.12模拟赛
写在前面:为了保护正睿题目版权,这里不放题面,只写题解。
“我发现问题的根源是大家都不会前缀和。”——敦爷
- A
敦爷spj写错了,差点把蒟蒻swk送走
\(50pts:\)
考虑不输出方案怎么做。显然是树形dp。
设\(f_{i,j,\{0/1/2\}}\)表示\(i\)的子树中,有\(j\)条链,根节点状态为:\(\{\)没选\(/\)选了向下的一条链\(/\)选了向下的两条链\(\}\)的最优解。
对于一棵子树,开始时只考虑根节点,依次合并每个儿子。合并时需要枚举父亲和儿子的状态,用\(size\)限制枚举上界,可以证明复杂度是\(O(nk)\)的。
转移的时候分别讨论各个状态之间的转移即可。
\(100pts:\)
输出方案也不难,只需要记录每个状态依次从哪个儿子的哪个状态转移来即可。
可以把转移方向放在儿子上,避免复杂的可持久化。
当然写起来就是另一回事了
复杂度证明:
合并大小分别为\(x,y\)的两棵子树,复杂度为\(O(\min(x,k)\cdot \min(y,k))\)。
不妨设\(x\geq y\),对两棵子树的三种情况分别分析。
①\(x\geq k, y\geq k\),则单次复杂度\(O(k^2)\),但这样的子树最多\(\frac{n}{k}\)棵,总复杂度\(O(nk)\)。
②\(x\geq k, y < k\),发现每个节点最多合并进\(size\geq k\)的子树一次,即整棵树上每个零散节点最多产生\(O(k)\)的复杂度,总复杂度\(O(nk)\)。
③\(x<k,y<k\),对于一个节点,最多与\(O(k)\)个节点合并后,子树大小就会\(\geq k\),因此每个节点最多产生\(O(k)\)的复杂度,总复杂度\(O(nk)\)。
- B
\(60pts:\)
对于一次操作\([x,y]\),区间\([l_i,r_i]\)被访问的充要条件是:\([x,y]\)与\([l_i,r_i]\)有交;\([x,y]\)不完全包含\([l_i,r_i]\)的父亲。
由此可以得到一个\(O(nq)\)的算法,即对线段树上的每个节点分别统计访问次数。实现时有很多分类讨论,比较复杂。
\(100pts:\)
对于\(O(nq)\)算法里的分类讨论,每种讨论实际上都可以提取出一个关于\(x,y\)的低次多项式。
发现如果区间\([l_i,r_i]\)被\([x,y]\)包含,则它的每一个子区间都被其包含。因此整个子树可以规避分类讨论,预处理多项式系数即可。
即询问时遇到完全包含的节点可以直接退出,复杂度等同于线段树区间询问,\(O(n+q\log n)\)。
- C
\(60pts:\)
发现\(h_{i+1}-h_i\)等于\(i\)位置结束的每个子串的\(G_i\)之和,即\([1,i]\)每个前缀的末尾增加了一个字符。
把\(n\)个后缀拉出来跑kmp,维护一下前缀和即可。
\(100pts:\)
对于字符串\(A\),\(f_i\)的含义其实是\(A[1…i]\)的border(相等的前后缀)个数。
由此得到\(G_A\)的含义是\(A\)的每个前缀出现的次数\(-1\)之和,因为每次枚举到这个前缀第一次出现以外的位置时,都会产生一次border的贡献。
再考虑\(h_{i+1}-h_i\),即\(\sum_{j=1}^i G_{S[j…i]}\)的意义,发现对于\(S[1…i]\)的每个子串,设其出现次数为\(d\),产生的贡献为\(\frac{d(d-1)}2\)。
用后缀自动机维护,每次加入新字符时,等价于\(fail\)树上到根节点的链\(+1\),可以离线树剖或者LCT维护。
ZROI 19.08.12模拟赛的更多相关文章
- ZROI 19.08.07模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "正睿从来没有保证,模拟赛的题目必须原创." "文案不是我写的,有问题找喵老师去."--蔡老师 ...
- ZROI 19.08.11模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. dlstql,wsl A \(10pts:\) \(a=100,T=100\),对每个排列构造一个反的,一步到位即可. \(20pts ...
- ZROI 19.08.10模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(20pts:\) 枚举操作序列然后暴力跑,复杂度\(O(6^n)\). \([50,80]pts:\) 枚举改成dfs,每层操 ...
- ZROI 19.08.09模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(70pts:\) 维护一个栈,从一侧向另一侧扫描,如果新加入的元素与当前栈顶相同,则出栈,否则进栈.显然一个子串是括号序列,当 ...
- ZROI 19.08.06模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. 今天正睿又倒闭了,从删库到跑路. 天祺鸽鸽txdy! A "不要像个小学生一样一分钟就上来问东西."--蔡老板 虽 ...
- ZROI 19.08.05模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(21pts:\) 随便枚举,随便爆搜就好了. \(65pts:\) 比较显然的dp,设\(f_{i,j,k}\)表示在子树\( ...
- ZROI 19.08.04模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "这应该是正睿OI历史上第一次差评破百的比赛." "这说明来正睿集训的人越来越多了." &qu ...
- [10.12模拟赛] 老大 (二分/树的直径/树形dp)
[10.12模拟赛] 老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图), ...
- ZROI 19.08.08模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. 首先恭喜swk今天翻车! "小心大样例演你."--天祺鸽鸽 果然swk今天被大样例演死了,天祺鸽鸽诚不欺我! A ...
随机推荐
- oracle数据字典视图
数据字典的概念 还记得我们在手工建库的时候,运行的两个脚本文件.一个是catalog.sql,另一个是catproc.sql.catalog.sql是用来创建数据库的内部字典表的.catp ...
- freebsd 隐藏ssh版本号
方案一: vi /etc/ssh/sshd_config VersionAddendum 为空或者no或者别的信息 /etc/rc.d/sshd restart 方案二: https://kram.n ...
- beanFactory 设计模式 Bean 生命周期
写在前面的话 适用读者:有一定经验的,本文不适合初学者,因为可能不能理解我在说什么 文章思路:不会一开始就像别的博客文章那样,Bean 的生命周期,源码解读(给你贴一大堆的源码).个人觉得应该由问题驱 ...
- Day02:变量 / JAVA基本类型
变量 什么是变量? 变化数值的载体 变量声明.初始化.使用 声明变量 类型 大小(占用空间) int x; 初始化变量 (赋值) 给予占用空间 int x=35; 使用变量 直接使用变量名 注意: ...
- 《Python编程从0到1》笔记2——表达式竟然也有副作用
在表达式的求值过程中,对状态的改变称为表达式的副作用.Python中内建的各种运算符(此处是狭义的含义,如加减乘除比较等运算符,并不包含用户自定义的运算符或函数)是没有副作用的,但各种函数调用时常带有 ...
- 【生成树趣题】CF723F st-Spanning Tree
题目传送门 题意: 给定一个n个点m条边的无向联通图,没有重边和自环.给定s和t,求一棵生成树,使得s,t的度数不超过ds,dt.若有解,输出“Yes”和方案(多组方案输出任意一组),若无解,输出“N ...
- C# 字符串、字节数组互相转换
/// <summary> /// MD5加密 /// </summary> /// <param name="sender"></par ...
- 洛谷 P1801 黑匣子 题解
题面 离线处理: 大体思路就是将数组排序,然后对于第k次询问把不可行的数打上标记,然后从头开始寻找第k个没打标记的点的值(排序后的数组保证了它是第k小的). 实现方法:首先离散化原始数组,得到数组fi ...
- 使用二阶微分锐化图像(拉普拉斯算子)基本原理及Python实现
1. 拉普拉斯算子 1.1 简介 一种典型的各向同性的微分算子,可用于检测图像中灰度图片的区域 $$ \nabla^{2} f=\frac{\partial^{2} f}{\partial x^{2} ...
- 编辑器IDE之VSCode
很多时候面临换项目组,公司内部换等等,需要清除之前的权限,电脑更换等... 确实很烦人,所以记录也是给自己下次更加快速方便的使用 插件安装 个人常用的一些插件,发现好用的会更新 插件名 功能 vsco ...