3月20日模拟赛 题解
3月20日模拟赛 题解
A 字符串(string)
引理:\(x\) 个人分 \(y\) 个苹果,可以有人不取,方案为 \(C_{y+x-1}^{x-1}\)。
本题中考虑每个字符串的贡献。假设一段可延展的空间为 \(l\),那么结果就是 \(C_{l+K-1}^{K-1}\),左右贡献相乘就是这个字符串的贡献。
我们在考虑每个字符串的 \(0\) 为偏序,假设 \(s_i\) 是括号前缀和($\texttt ( $ 为 \(1\),\(\texttt )\) 为 \(-1\))那么不难发现修改肯定是改前面一段的所有 \(\texttt )\) 和后面一段的所有 \(\texttt (\),说人话就是对于 \(s[l,r]\),他的 \(0\) 位偏序为:
对这个式子拆开分别求和即可。单调栈维护一下。
时间复杂度 \(O(n)\)。DRC 有 \(O(n\log n)\) 的 \(\texttt{cdq}\) 做法,不过我不太会。
B 序列(sequence)
很显然当 \(m=0\) 时是个很 经典的问题,这个问题的解法见我的 题解。
我们考虑修改。考虑 \(m=0\) 的时候维护的单调栈,我们要在任意地方查询肯定要用到可持久化单调栈(其实用主席树维护)。但是这样子修改对后面会产生较大的影响。由于从前、后扫出来的结果是一样的,所以我们可以维护两个单调栈:从前扫的时候,从后扫的时候的单调栈。
引理:只有在原来单调栈 \(st[1,x-1],st[x+1,n]\) 里的划分点在新数列当中可能作为划分点。
证明:因为从左右扫的结果是一样的。而每次加入元素的影响最多是合并前面的段,得证。
我们观察每次改变 \(x\) 所带来的改变:
很显然是把 \(st[1,x-1]\) 的一段后缀和 \(st[x+1,n]\) 的一段前缀合并了。我们尝试更进一步的探索性质。枚举前面合并段数 \(k\),那么对后面来说肯定是合并越少越好,我们可以在线段树上二分位置。我们最后再来看合并出来的段和他的前驱的大小相比,如果小了说明不合法,大了说明可能合并多了。
不难发现 \(k\) 也是可以二分的,复杂度降至 \(O(n\log^2n)\)。足已通过。
虽然实现起来不是很好写就对了。
C 旅行者(travel)
显然记录最短路和次短路跑 \(\texttt{dijkstra}\) 即可。时间复杂度 \(O(T n\log n)\)。
尽管还有 \(O(Tn\log^2n)\) 的 \(\text{edu}\) 做法,但我觉得没啥用。
原文地址:https://www.cnblogs.com/KawaiiOU/p/17238543.html
- 懒惰的力量
- 让AI自动修复程序中的bug:微软亚洲研究院新研究 | 附论文
- OpenDaylight与Mininet应用实战之OpenFlow1.0协议分析二
- Javascript: 世纪机器语言?
- OpenDaylight与Mininet应用实战之基本环境搭建一
- 永恒不变的魅力
- MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
- OpenDaylight与Mininet应用实战之流表操作三
- 天啊,这个围笑代表什么?麻省理工的AI比你更懂 | 论文+Demo
- elixir:灵丹妙药?or 徒有其名?
- OpenDaylight与Mininet应用实战之三层转发机制四
- 程序员效率指南
- 【每日播报】OpenDaylight与Mininet应用实战之复杂网络验证(五)
- Docker hackathon, teamspark 及团队协作软件设计上的思考
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 前端进程间通讯的渗透之术
- 动态气泡图,拿走不谢!
- 刷爆全网的动态条形图,原来5行Python代码就能实现!
- Vue框架av88732281笔记
- iOS-组件化(OC篇)
- Angular async pipe在html模板中的一个实际应用
- 3D引擎中LOD技术的理论基础
- one-hot encoding不是万能的,这些分类变量编码方法你值得拥有
- 【5分钟玩转Lighthouse】爬取JavaScript动态渲染页面
- 科技爱好者周刊(第 127 期):未来人人开发软件,几乎没人编码
- mac快捷键
- 浅谈Kotlin的Checked Exception机制
- 自研网关:特殊URL功能的开发
- centos7多网卡配置
- vuecli3 build之后静态文件出现404