信友队 2023 国庆集训 做题记录
Day 1
0 + 0 + 0 + 0.
A. 商店
考虑在时刻 ,若先去 再去 比先去 再去 更优,那么我们有
\begin{alignedat}{} & & t + ta_i + b_i + 1 + (t + ta_i + b_i + 1)a_j + b_j &\le t + ta_j + b_j + 1 + (t + ta_j + b_j + 1)a_i + b_i \\ & \Rightarrow & b_i + b_ia_j + a_j + b_j &\le b_j + b_ja_i + a_i + b_i \end{alignedat}
很神奇啊, 没了,也就是说对于选取的一个集合,我们去买东西的顺序其实是一定的.
将序列按照上述方式排序后,问题弱化为选出子序列,最大化子序列长度,容易设计一个 DP 来解决.设 表示考虑了前 个商店,当前时刻为 的最长子序列长度,转移是简单的.
这 DP 第二维有 ,显然寄了,但是注意到 时的答案并不大,大概是 级别的(这是因为每选一个 的商店时,时刻至少翻倍),于是考虑只 DP 的部分,剩下的商店显然可以贪心拼接,然后将 DP 的值域和定义域换一下,设 表示考虑前 个商店,子序列长度为 的最小时刻,就可以解决了.
时间复杂度 .
B. 下午茶
由于 是奇数,我们建出 的边,容易证明这张图由若干个环构成.
又由于 ,也就是说不存在 使得 ,这证明 和 一定在不同的环中.且 和 所在的环中的元素仅相差一个符号,也就是说可以将其一一对应,我们的目标是用最小的代价使得对应元素相等.
上文中可以看出,环的总数为偶数,所以我们只需要解决有两个环的情况就解决了问题.
考虑将环对齐后对位相减,目标变成调整成 ,这不是我们 糖果传递 吗!然后就做完了.
C. 逆向惯性思维
下辈子注意别把式子抄掉几项.
容易发现题目让我们求的就是
拆!
显然四个 做法相同,我们只需要解决一个就行.以第一个为例.
考虑扫 ,设当前的点为 ,我们将贡献分成两个部分: 由 取到的和 由其他点取到的.第一部分是容易计算的,设在 左下方的点的个数为 ,那么这一部分贡献就是 .
考虑计算第二部分,我们可以枚举在 左上方的一个点,显然在这个点下方的所有点都是可以随便选的,反演一下,每个点会对 坐标大于自己的点造成一次 的贡献.但是这个做法无法处理存在 坐标相同的点的情况.考虑 坐标相同的点的贡献系数长什么样,发现状若一个等比求和,那么再多支持一个单点加就能做了.
D. 模糊的字符串
鉴定为烂.
由 经典套路 可得,直接使用主席树维护 hash 就能算 LCP.
考虑如何比字典序,若有一个串 LCP 后面一个字符此前没有出现过,那么肯定是这个串的字典序大.若此前都出现过,我们需要比较字符在子串中第一次出现位置,这个可以轻易用二分解决.
Day 2
10 + 30 + 80.
A. Counting
一点不会,狗都不补.
B. Graph
构造./qd
先尝试一下树的部分分!
我们考虑以下的构造方案:
-
从一个点开始,对树进行 dfs.初始所有点都在 集合中.
-
搜到 时,将 从 移动到 中.
-
从 离开时,将 从 移动到 中.
-
若某次操作后,,那么我们就得到了一组合法的构造.
每次操作都会使得 减少 ,而 dfs 前 ,完成 dfs 后 ,也就是说一定存在某次操作,操作完后 ,不存在无解.
考虑扩展到图上,发现这个做法的唯一阻碍在于,若我们搜出的生成树中有横叉边,那么 集合间就可能有边.然而如果我们直接选取一棵 dfs 树,那么就解决了这个问题.
C. 演唱会
HBOI2022 模拟赛./xia
考虑建出圆方树,那么一条路径上必经的点就是圆方树上两点间的圆点数目.题意转化为求有多少路径 满足 和 均为圆点,且路径上的圆点数目等于 .
可以简单利用 DSU on tree 解决.卡下常就过了.
也可以利用长链剖分优化 DP 做到 ,如果联赛没似就补.
Day 4
100 + 100 + 60 + 40.
A. 区块链
有
枚举 计算取 即可.
B. 菜肴
shaber 玩意.按题意模拟即可.
C. 再买一件
不会.
D. 基因优化
能过是什么 shaber.
考虑贪心地从前往后翻.
对于相邻的两个能够翻动的位置,不同的翻动方式最多得到 个串,比一下字典序大小就行.
Day 5
30 + 20 + 52 + 0.
A. NOIP
注意到将 升序排序后,每个赛站匹配的一定是连续的一段.
那么就可以根据这个性质来设计 DP.设 表示匹配了前 个选手,使用了前 个赛站.转移枚举本次匹配了多少,有
其中 代表 这一段和 匹配的代价.
容易使用线段树优化转移.
B. 大卫·马丁内斯
幽默.
尝试从全 的属性值开始调整.
注意到 组任务中对于属性值 的要求构成排列,也就是说每将一个属性值下调 ,最多使一组任务失败.那么直接顺着调整,由于开始成功的任务组数为 ,结束时成功数为 ,过程中每次至多减去 ,也就是说一定能调整到 .
C. 大大大
不会.
D. 启动
不会.
Day 6
75 + 40 + 30 + 20.
A. 巴士路线
有一个显然的倍增优化建边的做法.很可惜,空间寄了.
考虑先用若干根从 开始的巴士路线进行类似 bfs 的过程,但是只搜没有搜过的点.
由于第一次覆盖到某个点一定是换乘次数最少的方案,正确性显然.
B. 拍照
,只需考虑如何线性求到达顺序确定后的丑陋值和.
设 为编号为 的人到达的时间,显然能和 造成贡献的人只能是贡献了 这个前缀中的某些后缀最小值的位置.
用一个单调栈维护,弹栈时顺便统计一下贡献.
C. 情报破译
由于是位运算,位与位之间独立,考虑拆位.
设 表示从 的第 位,操作序列的第 位开始往后操作 轮后, 会变成什么.转移直接拼接前后两部分即可.细节有点多.
多带了个 跑不大动,发现这个拆位可以通过位运算优化掉.具体地,将状态重新设为一个全 数会变成什么,这样也可以通过位运算 转移,去掉拆位的 .
D. ⼩镇做题家
设集合 表示课程 包含的学生集合.
若 ,连边 ,边权为 .
这个图上 , 间的最短路的含义是某题从课程 传递到课程 需要被多少人看到.
那么对于点对 ,答案就是
预处理学生到所有课程的最短路即可 完成.
Day 7
摆了.