JOISC 2022 记录
Day1 T1 Jail
操作很类似华容道。由于这题是可以树,同时每一个人走的都是最短路,这也就意味着不会出现通过好多个人一起的挪动来匀出空间。
所以如果合法,必然存在一种方案是每一次直接将一个人挪到终点。
由此,对于一个人 \((S_i,T_i)\) 来说,起点在他的路径上的人必然在他之前移动,终点在他的路径上的人必然在他之后移动。这个偏序关系可以使用树剖+线段树优化建图来做到。
然后拓扑排序一遍判断是否有环即可,时间复杂度 \(O(n\log^2n)\)。
Day1 T2 Sightseeing in Kyoto
考虑什么时候会出现拐弯的情况。如果我们的路线是 \((l,x)\to (l,y)\to (r,y)\)。
则它的贡献为 \((y-x)A_l+(r-l)B_y\),它小于 \((r-l)B_x+(y-x)A_r\)。
也就是 \((y-x)A_l+(r-l)B_y<(r-l)B_x+(y-x)A_r\)。
整理得 \(\dfrac{B_y-B_x}{y-x}<\dfrac{A_r-A_l}{r-l}\),这也就意味着,对于最优解,我们会贪心的走斜率更小的一遍,所以我们维护出一个下凸壳,每一次贪心的移动即可。
Day1 T3 Misspelling
每一条限制都是形如,在 \([l,r]\) 之间,第一次出现 \(c_i\neq c_{i-1}\) 的时候,它需要满足 \(c_i>c_{i-1}\) 或 \(c_i<c_{i-1}\)。
考虑记 \(f_{i,c}\) 表示处理了前 \(i-1\) 位,从第 \(i\) 位开始是一个为 \(c\) 的连续段的方案数,转移可以使用线段树维护,时间复杂度 \(O(n\Sigma\log n)\)。
Day2 T1 Copy and Paste 3
Day2 T2 Flights
神秘通信题。
Day2 T3 Team Contest
我们必然是选择 \(X,Y,Z\) 最大的三个人最优,但是如果其中有一个人在两项中作为的最大值,则它必然不可能作为合法的答案出现,我们就可以将其删除,这样就变成了一个子问题。
不断重复删除的过程,使用优先队列维护当前最大值即可,时间复杂度 \(O(n\log n)\)。
Day3 T1 Broken Device 2
Day3 T2 Sprinkler
树上邻域乘,单点查询。
当然可以用点分树来做,但是太麻烦了。考虑到 \(D\),很小,所以我们可以将每一次邻域乘的操作拆分成 \(O(D)\) 个对树上某一个子树的某一层的乘法操作,直接暴力维护即可,时间复杂度 \(O(nD)\)。
Day3 T3 Ants and Sugar
这是一个二分图最大匹配的结构,根据 Hall 定理,可以得到最终答案为:\(\sum\limits_{i=0}^XA_i-\max\limits_{S}\left(\sum\limits_{[l',r']\in S}\left(\sum\limits_{i=l'}^{r'}A_i-\sum\limits_{i=l'-L}^{r'+L}B_i\right)\right)\)。
其中 \(S\) 是可能的区间集合,我们发现,任何两个相邻的区间之间的距离必然大于 \(2L\),否则将这两个区间合并在一起更优。
记 \(p_i=-\sum\limits_{j=1}^iA_j+\sum\limits_{j=1}^{i-L}B_j\),\(q_i=\sum\limits_{j=1}^iA_j-\sum\limits_{j=1}^{i+L}B_j\)。
则上式就等于 \(\sum\limits_{i=0}^XA_i-\max\limits_{S}\left(\sum\limits_{[l',r']\in S}\left(q_{r'}-p_{l'-1}\right)\right)\)。
也就是要最大化 \(p,q\) 的交替出现求和。使用线段树维护 \(f_{0/1,0/1}\) 表示当前区间中最左边或最右边是 \(p\) 或 \(q\) 的最大可能值。
考虑到对于一个 \(A\) 或者 \(B\) 的修改就是对一段后缀的 \(p\) 或者 \(q\) 进行加减,在进行 \(A\) 的操作时,是会对某个后缀的 \(p\) 减少,\(q\) 增加,可以直接对于每一个 \(f_{0/1,0/1}\) 进行对应的修改;而在对 \(B\) 进行操作的时候,\(q\) 会比 \(p\) 多修改一段长度为 \(2L\) 的,但是考虑到相邻区间的距离大于 \(2L\),所以说被修改的一段内至多只有一个 \(p\) 和一个 \(q\),所以对于每一个 \(f_{0/1,0/1}\) 的修改也是可以直接计算出来的。
时间复杂度 \(O(n\log n)\)。
Day4 T1 Super Dango Maker
考虑可以询问的次数大约是 \(NM\log_2M\),所以考虑分治。
我们希望能够将 \(M\) 组团子分成两组,一组是 \(\left\lfloor\dfrac{M}{2}\right\rfloor\) 个,另一组是 \(\left\lceil\dfrac{M}{2}\right\rceil\) 个。
考虑以此尝试删去每一个团子,如果删去之后可以组成的团子组数小于 \(\left\lfloor\dfrac{M}{2}\right\rfloor\) 了,就把它加回来,这样一直操作,就可以均分了。
操作次数是 \(NM\log_2M\) 的,可以通过。
Day4 T2 Fish 2
考虑维护每一条鱼可以吃的最长区间,则包含了某一个点的本质不同区间最多只有 \(O(\log V)\) 个,因为一个区间是极长的,就意味着它左右两侧的点的权值大于区间的权值和,想要让区间扩张,区间权值和至少翻倍,而区间和达到上界 \(V\) 之后就必然可以将所有的鱼吃掉了。
由于我们要进行区间查询,所以考虑如何在区间内部维护这一信息,还需要支持快速合并。
发现一个区间想要能够再向外扩展,它至少需要包含左端点或者右端点中的一个,由此,我们可以将可能拓展的点分成三类:
- 只包含左端点的区间,有 \(O(\log V)\) 种。
- 只包含右端点的区间,有 \(O(\log V)\) 种。
- 同时包含了左右端点的区间,只有一种。
对我们对于这每一个区间维护出它们的区间和,它们是被多大的数阻挡了拓展,以及有多少个点是对应了这个区间的。
现在考虑合并,最关键的是如何处理左区间的右端点区间和右区间的左端点区间。
考虑和正常处理一条鱼能够走多远一样,让它贪心的像左右交替拓展即可,单次合并的复杂度可以做到 \(O(\log V)\)。
整体复杂度为 \(O(n\log n\log V)\)。
Day4 T3 Reconstruction Project
可以证明,对于每一个 \(X\),选择的边必然是小于等于某一个阈值的所有边中的最大生成树。
所以我们从小到大加入每一条边,同时在有替换边的时候维护一下有哪些 \(X\) 是由之前的做贡献的即可,可以暴力维护生成树。时间复杂度 \(O(nm+q)\)。
JOISC 2022 记录的更多相关文章
- 「JOISC 2022 Day1」京都观光 题解
Solution 考虑从\((x_1,y_1)\)走到\((x_2,y_2)\)满足只改变一次方向,则容易求出先向南走当且仅当 \[\frac{a_{x_1} - a_{x_2}}{x_1 - x_2 ...
- 使用Visual Studio工具将ActiveX控件的COM类库转换为窗体控件
1:转换目的 Windows窗体只能继承Windows 窗体控件.如果要承载ActiveX控件,必须生成AxHost派生的包装器控件. 在使用WPF呈现ActiveX控件的时候,需要将com类库(oc ...
- Java学习记录:2022年1月13日(其二)
Java学习记录:2022年1月13日(其二) 摘要:本篇笔记主要记录了在设计类时的一些注意事项,类加载时类中各个部分的加载顺序以及继承和多态的知识. 目录 Java学习记录:2022年1月13日 ...
- Windows Server 2016域控制器升级到Windows Server 2022遇到的问题记录Fix error 0x800F081E – 0x20003
1. 非域控服务器升级 将两台Web服务器和数据库服务器(Windows Server 2016, 2019)成功升级至到Windows Server 2022,非常顺利,一次成功. 直接在Windo ...
- 【JOISC 2020 补题记录】
目录 Day 1 Building 4 Hamburg Steak Sweeping Day 2 Chameleon's Love Making Friends on Joitter is Fun R ...
- AcWing刷题记录 - 2022
AcWing 1813. 方块游戏 思路 枚举,题目说明不管哪一面向上都可以,所以就两面加起来取各个字母的最大值,最后N对字母的最大值相加就是答案 代码 #include<bits/stdc++ ...
- MISC 2022/4/21 刷题记录-千字文
1.千字文 得到名为png的无类型文件,010 Editor查看,png,改后缀,得到二维码 QR扫描,得到一句话"这里只有二维码" 思路不对,binwalk一下,发现有错误信息 ...
- Visual Studio 2022 MAUI NU1105(NETSDK1005) 处理记录
故障说明 MAUI项目是日常使用的项目,一直都好好的 某一天修改了几行代码后,突然项目无法编译了,提示NU1105错误 从Git重新拉取一份之前的代码编译也是同样的错误,经过半天的查阅,尝试了几种方案 ...
- 2022 icpc 沈阳站 记录(非题解)
赛前 大概是赛前三周才突然知道拥有了比赛机会. 赛前训练和vp频率很高,有一段时间cf上都是绿的.比赛的那一周只有一天没在vp,到了周六热身赛我人都有点麻木.(可能正赛也是类似的状态吧) 比赛的过程b ...
- Apache coredump 问题发现与解决记录
目录 Apache coredump 问题发现与解决记录 背景 发现问题 解决问题 方法 1 方法 2 总结 Linux 程序编译链接动态库版本问题 ldd 命令 动态库的编译和 soname 线上 ...
随机推荐
- docker 原理之 mount namespace(下)
1. mount namespace mount namespace 通过隔离文件系统挂载点对隔离文件系统提供支持.使用 unshare 构造 mount namespace 如下: root@chu ...
- 25-IP核简介
1.IP IP(Intellectual Property)即知识产权,在半导体产业中讲IP核定义为用于"ASIC或FPGA中的预先设计好的电路功能模块".简言之,这里的IP即电路 ...
- 【linux】Linux内核结构体--kfifo 环状缓冲区
1.前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的.缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度.例如一个进程A产 ...
- SpringMVC06——数据绑定——2021-05-09
数据绑定介绍 在执行程序时,SpringMVC会根据客户端请求参数的不同, 将请求信息中的信息以一定的方式转换并绑定到控制器类的方法参数中. 在数据绑定过程中,SpringMVC框架会通过数据绑定组件 ...
- 基本操作Linux
基本操作Linux 关机,重启# 关机 shutdown -h now # 重启 shutdown -r now 查看系统,CPU信息# 查看系统内核信息 uname -a # 查看系统内核版本 ca ...
- mongo-连接失败
连接mongo失败 默认情况下,mongo最大支持65535个连接 查询当前支持的连接数 db.serverStatus.connections { "current" : 3,/ ...
- .NET技术面试题系列(2) -sql server数据库优化规范
1.数据库优化规范 a.索引 每个表格都要求建立主键,主键上不一定需要强制建立聚集索引. 聚集索引,表中存储的数据按照索引的顺序存储,即逻辑顺序决定了表中相应行的物理顺序,因此聚集索引的字段值应是不会 ...
- [转帖]Jmeter接口测试:参数化
Jmeter接口请求中的参数经常需要通过参数进行赋值 引用形式:${} 变量时:${变量名} 函数时,${_函数名(参数1,参数2,参数3)} 值中"${n}"中,n为变量名:&q ...
- Python处理Oracle数据库的学习过程
Python处理Oracle数据库的学习过程 背景 产品数据存在一些大小写敏感的数据迁移到不敏感的数据库时出现报错的情况. 基于此, 我这边跟帅男同学学习了下Python的使用. 因为这一块一直比较菜 ...
- [转帖]Linux命令拾遗-动态追踪工具
原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 这是Linux命令拾遗系列的第六篇,本篇主要介绍工作中常用的动态追踪工具strace.arthas.bpft ...