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

暴力 SAM 做法

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\) 之后就必然可以将所有的鱼吃掉了。

由于我们要进行区间查询,所以考虑如何在区间内部维护这一信息,还需要支持快速合并。

发现一个区间想要能够再向外扩展,它至少需要包含左端点或者右端点中的一个,由此,我们可以将可能拓展的点分成三类:

  1. 只包含左端点的区间,有 \(O(\log V)\) 种。
  2. 只包含右端点的区间,有 \(O(\log V)\) 种。
  3. 同时包含了左右端点的区间,只有一种。

对我们对于这每一个区间维护出它们的区间和,它们是被多大的数阻挡了拓展,以及有多少个点是对应了这个区间的。

现在考虑合并,最关键的是如何处理左区间的右端点区间和右区间的左端点区间。

考虑和正常处理一条鱼能够走多远一样,让它贪心的像左右交替拓展即可,单次合并的复杂度可以做到 \(O(\log V)\)。

整体复杂度为 \(O(n\log n\log V)\)。

Day4 T3 Reconstruction Project

可以证明,对于每一个 \(X\),选择的边必然是小于等于某一个阈值的所有边中的最大生成树。

所以我们从小到大加入每一条边,同时在有替换边的时候维护一下有哪些 \(X\) 是由之前的做贡献的即可,可以暴力维护生成树。时间复杂度 \(O(nm+q)\)。

JOISC 2022 记录的更多相关文章

  1. 「JOISC 2022 Day1」京都观光 题解

    Solution 考虑从\((x_1,y_1)\)走到\((x_2,y_2)\)满足只改变一次方向,则容易求出先向南走当且仅当 \[\frac{a_{x_1} - a_{x_2}}{x_1 - x_2 ...

  2. 使用Visual Studio工具将ActiveX控件的COM类库转换为窗体控件

    1:转换目的 Windows窗体只能继承Windows 窗体控件.如果要承载ActiveX控件,必须生成AxHost派生的包装器控件. 在使用WPF呈现ActiveX控件的时候,需要将com类库(oc ...

  3. Java学习记录:2022年1月13日(其二)

    Java学习记录:2022年1月13日(其二) ​ 摘要:本篇笔记主要记录了在设计类时的一些注意事项,类加载时类中各个部分的加载顺序以及继承和多态的知识. 目录 Java学习记录:2022年1月13日 ...

  4. Windows Server 2016域控制器升级到Windows Server 2022遇到的问题记录Fix error 0x800F081E – 0x20003

    1. 非域控服务器升级 将两台Web服务器和数据库服务器(Windows Server 2016, 2019)成功升级至到Windows Server 2022,非常顺利,一次成功. 直接在Windo ...

  5. 【JOISC 2020 补题记录】

    目录 Day 1 Building 4 Hamburg Steak Sweeping Day 2 Chameleon's Love Making Friends on Joitter is Fun R ...

  6. AcWing刷题记录 - 2022

    AcWing 1813. 方块游戏 思路 枚举,题目说明不管哪一面向上都可以,所以就两面加起来取各个字母的最大值,最后N对字母的最大值相加就是答案 代码 #include<bits/stdc++ ...

  7. MISC 2022/4/21 刷题记录-千字文

    1.千字文 得到名为png的无类型文件,010 Editor查看,png,改后缀,得到二维码 QR扫描,得到一句话"这里只有二维码" 思路不对,binwalk一下,发现有错误信息 ...

  8. Visual Studio 2022 MAUI NU1105(NETSDK1005) 处理记录

    故障说明 MAUI项目是日常使用的项目,一直都好好的 某一天修改了几行代码后,突然项目无法编译了,提示NU1105错误 从Git重新拉取一份之前的代码编译也是同样的错误,经过半天的查阅,尝试了几种方案 ...

  9. 2022 icpc 沈阳站 记录(非题解)

    赛前 大概是赛前三周才突然知道拥有了比赛机会. 赛前训练和vp频率很高,有一段时间cf上都是绿的.比赛的那一周只有一天没在vp,到了周六热身赛我人都有点麻木.(可能正赛也是类似的状态吧) 比赛的过程b ...

  10. Apache coredump 问题发现与解决记录

    目录 Apache coredump 问题发现与解决记录 背景 发现问题 解决问题 方法 1 方法 2 总结 Linux 程序编译链接动态库版本问题 ldd 命令 动态库的编译和 soname 线上 ...

随机推荐

  1. shell脚本(4)-格式化输入

    一.read命令 1.概念: 默认接受键盘的输入,回车符代表输入结束 2.read命令选项 -p:打印信息 -t:限定时间 -s:不回显 -n:输入字符个数 3.举例说明 (1)模拟登录 [root@ ...

  2. asio 使用 openssl 示例

    #include <boost/asio.hpp> #include <boost/asio/ssl.hpp> #include <boost/algorithm/str ...

  3. idea相关配置及插件安装

    对idea相关的配置及好用的插件进行总结下. 一.idea 破解码及配置:https://www.jb51.net/softs/672190.html 二.idea插件: 1.findBugs-ide ...

  4. cout对象在全局只能拥有一个

    1.问题 在学习符号重载的过程中,有一个想法 std::ostream& operator<<(std::ostream &cout, Person &p); 中s ...

  5. 指定特定IP走特定网卡的方法

    指定特定IP走特定网卡的方法 背景 目标: 能够在有VPN以及多个网卡的情况下, 使用特定的IP地址进行登录服务器. 作用: 便于审计以及安全管理, 避免出现安全风险. 方式方法: route 命令设 ...

  6. 【转帖】基于paramiko的二次封装

    https://www.jianshu.com/p/944674f44b24 paramiko 是 Python 中的一个用来连接远程主机的第三方工具,通过使用 paramiko 可以用来代替以 ss ...

  7. buildkit ctr 与 k3s的简单学习

    摘要 前面一部分学习了 buildkit的简单搭建 也学习会了如果build images的简单处理 但是搭建镜像只是万里长征第一步. 如何进行微服务部署,才是关键的第二步. 公司最近使用基于K3S的 ...

  8. STM32CubeMX教程24 WDG - 独立窗口看门狗

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm ...

  9. Hutool中那些常用的工具类和实用方法

    背景 灵魂拷问1:还在为新项目工具类搬迁而烦恼? 灵魂拷问2:还在为项目中工具类维护而烦恼? 简述 **Hutool**它是一个Java工具集类库,包含了很多静态方法的封装:流处理.时间日期处理.正则 ...

  10. XCODE IOS 静态链接库替换升级

    XCODE 版本15.2. 一个很久需求没更新的IOS 应用,近来有新需求要开发. 拉下代码运行,出现了个BAD_ACCESS错误.出错的位置位于一个调用的第三方的.a静态库内部.因为调用代码并没有修 ...