JOISC 2023
Day 1
currencies
有一棵边权是
w_i 的树,询问在路径u \rightarrow v 上,要么花费(1,0) 要么花费(0,w_i) ,在总花费不超过(x,y) 的前提下最小的第一类花费次数。
在主席树上二分即可。
festival2
考虑将
[2n] 匹配形成的n 个区间。某个人希望找出一个最大的无交区间集,他采取的方式是按照左端点排序贪心。问在多少种匹配方式下这个做法是错误的。
passport
在
[1,n] 上每个点提供访问[l_i,r_i] 的通行证。从一个点出发,如果获得这个点的通行证即可更新可访问范围,然后可以获得更多的通行证。问从每个点出发,访问所有点最少需要多少通行证。
假设从起点出发,不会拿到一个通行证,它完全偏序了之前的通行证。否则用线段树优化建图松弛一下即可。
那么一个位置可以分为向左更新和向右更新两类。我们可以令
然后可以求出每个点的答案,再跑一个最短路即可。
Day 2
conveyor
有一棵边的方向未知的树,一次询问可以在一些点集上放一个物品,将一个边集反向,然后交互库会进行一次操作:对于每个有物品的点,如果有出边,则将这个物品移向某一条出边(由交互库决定),否则不进行操作,最后返回每个点上有没有物品。需要求出每条边的方向。
n \leq 10^5 ,询问次数不能超过30 。
一开始就在想一个错误的方向(把规模除2),导致一直没有爬出来。
考虑把和某条无向边相邻的点按深度 mod 3 分类,取最大的点集询问,调整相邻的有向边方向使得物品不可能从这条边走出去。
那么每次至少确定
有一个细节是两个深度相同的点的物品可能走向同一个点(公共父亲),所以应该先在儿子中寻找物品。
council
n$ 个人给 $m$ 个议项投票,要选一个主席和一个副主席出来让他们的选票作废,如果某个议项的票数至少是 $\lfloor{n\over 2}\rfloor$ 则通过。问固定主席的情况下最多通过多少议项。$n\leq 3\times 10^5, m \leq 20
每个议项有4种状态,我们可以跑一个类似 FWT 的东西求出每种 mask 的答案。复杂度
mizuyokan2
给出一个正整数序列,将其分成一些段使得一段的和的大小关系形如
<><>...或><><...。多次询问,对一个区间求答案。n \leq 250000,q \leq 50000,a_i \leq 10^9
Day 3
chorus
有一个长度为
2n 的 AB 序列,AB 个数相同,可以进行一些交换,使得得到的序列可以分成k 个子序列,每个子序列形如x 个 A 和x 个 B。最小化操作次数。n \leq 10^6 ,时限 6s。
最终序列无论如何都是合法括号序列,所以先贪心地将原序列调整为合法括号序列(每一步都取到答案下界)。
令
最终方案一定是将一段区间分为一个子序列。考虑
于是带权二分后可以得到一个 1D1D 的dp。有一些做法:
显然这个dp有决策单调性,直接上分治是
其实这个代价函数可以预处理后
其实这个代价函数可以分成两半,一半斜优另一半直接单调队列,可以
因为单 log 写起来比较恶心于是写了第二种做法。
cookies
有
n 种饼干,数量为a_i ,需要放在一些盒子里,每个盒子不能放多个同一种类的饼干,最终所有盒子都需要填满。盒子的大小取值范围是一个集合,问最少需要多少盒子。n, \sum a \leq 15000
将
令
输出方案可以倒着跑一遍,求出来 b,然后贪心。
tourism
给出一棵树,询问区间点集的虚树一共覆盖多少点。
典中典问题。先求
Day 4
battle
主持人会给 A 一个长度为
n(n \leq 43) 的 AB 字符串以及(X,Y) 。A 可以给一个8 \times 8 网格涂上两种颜色,然后主持人会把网格的第X 行与第Y 列任意涂色。然后网格和n 会交给 B,B 需要说出原本的字符串是什么。
guard
travel
数轴上有
n 个特殊点。一个人从某个位置出发走遍所有点,每次他会选择还未选择的较近点(如果左右距离相同选左边),问他走的距离和。
容易看出只会拐弯