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 线上 ...
随机推荐
- Cortex-M3内核介绍
目录 Cortex Vendor - ARM介绍 ARM主要提供指令集,需要授权 ARM使用的RSIC结构,功耗比较低 Cortex M3整体架构 核心是Processor Core - 包含寄存器和 ...
- [转帖]Oracle中unicode的几种不同字符编码模式
https://zhuanlan.zhihu.com/p/668340691# 在Oracle中unicode字符集中,存在以下几种不同unicode字符集的编码模式 AL32UTF8 UTF8 ...
- [转帖]SMEMBERS:获取集合包含的所有元素
https://www.bookstack.cn/read/redisguide/spilt.4.291fab46a3b4f05c.md SMEMBERS set 以下代码展示了如何使用 SMEMBE ...
- [转帖]DBWR与LGWR的写入机制
https://www.jianshu.com/p/6c87cb6cd320 读与写是每个数据库提供的最基本的功能.当数据库中出现第一个进程时,总免不了要将数据从磁盘上加载到内存中,一次数据库的物理I ...
- [转帖]并发控制- sched_yield 函数
函数说明 函数原型 #include <sched.h> int sched_yield(void); 1 2 sched_yield的作用是让出处理器,调用时会导致当前线程放弃CPU,进 ...
- 结论&定理大全
定理 1:包含 \(0\) 与 \(2^k-1\) 的按位与或空间和 \(k\) 个点的有传递性的有向图形成双射 证明: 空间->传递闭包:对于任意两个位 \(i,j\),若某个数包含 \(i\ ...
- 数据仓库(4)基于维度建模的数仓KimBall架构
基于维度建模的KimBall架构,将数据仓库划分为4个不同的部分.分别是操作型源系统.ETL系统.数据展现和商业智能应用,如下图. 操作型源系统,指的就是面向用户的各类系统,如app.网站.E ...
- OpenIM集群(非k8s)部署文档
自行部署etcd/zookeeper/mysql/kafka/mongo/redis集群,可以根据此性能评估服务器需求. 以下是针对一台华为云主机s3的压测数据:8核16G内存,普通磁盘(非SSD)( ...
- 开源IM项目OpenIM新版本发布-生产环境需更新
项目简介 Android体验地址:https://www.pgyer.com/OpenIM 注册后自动加入组织,和群聊 群聊页面 工作台 工作台,业务可以通过jssdk自由扩展自身业务 工作圈 工作圈 ...
- 5.9 Windows驱动开发:内核InlineHook挂钩技术
在上一章<内核LDE64引擎计算汇编长度>中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook函数挂钩其实 ...