好久没更博了。
2020 省选联考
「联合省选 2020 A | B」冰火战士]
找单调增、降的最小值这样的函数的最大值。
先二分一次找到临界点,然后最优答案一定存在于左右两边,然后再二分一次找到最右侧能取到的位置。
用树状数组常数小 (O(n log n))
「联合省选 2020 A」组合数问题
下降幂和组合数结合:
如果把 (f) 转为下降幂多项式 (b),交换求和顺序后,第二层可以化为一个二项式定理的形式。
「联合省选 2020 A」魔法商店
论文题。
保序回归问题:给定数组 (w, y, p),同时给一个 DAG,赋值 (f),要求赋值后任何一条 DAG 上路径 (f) 递增,最小化 (sum_i w_i|f_i-y_i|^p)
做法:整体二分,转化为只选 (mid, mid+epsilon) 的问题(确保这之中不会有最优解),这个是最大权闭合图模型。选的这个东西类似于求导。
此题:把可以代替 (A) 里的一个元素 (u) 的点 (v),连 ((u, v)) 的边。(B) 类似。
「联合省选 2020 B」幸运数字
差分
「联合省选 2020 A | B」信号传递
卡空间的屑状压DP
「联合省选 2020 A」树
按位考虑每个点对祖先的贡献。
对于第 (k) 位,是一个 (2^{k+1}) 的循环节(可以理解为模这个意义下加法),并且每 (2^{k}) 个切换一个状态。那么切换状态的深度满足模 (2^k) 同余,用一个桶记录一下差分的地方,用天天爱跑步的方法把子树的贡献拿出来即可。
「联合省选 2020 A」作业题
枚举 (gcd),算出对应的和。考虑算是 (k) 的倍数的生成树边权和,然后简单容斥。
经典用矩阵树定理,把值搞成 (1 + wx) 的形式,最后一次项就是答案。
「联合省选 2020 B」卡牌游戏
若干前缀和最大值
「联合省选 2020 B」消息传递
简单点分治。(O(n log n))
「联合省选 2020 B」丁香之路
考虑走过的边形成的图,起点和终点度数是奇数,剩下都是偶数,给起点终点手动加一个度后,问题变为了再给这个图加一些边使得所有点都是偶数,并且联通。
两两奇数度点连边(注意,这之中的点也都加入联通块,可以理解为这之间都连 (1) 的边),这样一定花费最小,如果不相邻就会出现交叉,显然不优。
然后解决联通问题,考虑联通整个图最小代价是最小生成树,还得保持偶度数,答案贡献加 (2 imes) 最小生成树。
复杂度 (O(m + n^2log n))
2019 十二省联考
「十二省联考 2019」异或粽子
前缀和后即两两异或前 (k) 大值。先转成有序,然后人为固定一个顺序。这里就 (t_{u,k}) 表示和 (u) 异或第 (k) 大的,一开始把 (t_{i,1}) 放进去,之后每次拿出 (t_{u,k}) 就插入 (t_{u,k+1}),找第 (k) 大可以建立 Trie 树 (O(log)) 做到。
复杂度 (O(k log n))
「十二省联考 2019」字符串问题
把支配关系放在图上,然后再用每个 (B) 串 (u) 和每个 (A) 串 (v) 满足 (u) 是 (v) 前缀,连一条 ((u,v)) 的边,边权是 (v) 的长度,可再建一个起始点,向每个 (A) 串连边权长度的边。答案就是起始点开始图上最长路。
考虑如何快速连边。
- 建 SA,按长度最小到大顺序,每次插入一个 (B) 串时,SA 上的一段区间的 (A) 串(可以二分找)向 (B) 串连边,主席树优化建图即可。
- 把串都反转,前缀关系变为后缀,建 SAM,SAM 的 Link 树上 (u) 是 (v) 的后缀等价于 (u) 是 (v) 的祖先,因此 (u) 向子树连边即可。但需要注意的是,由于 SAM 高度压缩,但长串不能向短串连边,因此就要在 SAM 上拆点。我是在 SAM 的每个节点上开个 ( ext{map}),对应长度统计编号,最后统一建父亲向儿子的边。
复杂度都是 (O(n log n)) 的,不过 SA 的空间大一点。
「十二省联考 2019」骗分过样例
告辞
「十二省联考 2019」皮配
关键是我们并不需要决定具体选择哪个导师。限制也是阵营、派系的。并且这两个确定,就能唯一确定一个导师。
所以问题就是给每个学校分配两个属性,城市里学校选择阵营要一样,因此得一起选,分部 DP,最后合并时枚举一个维度,剩下一维是一个矩阵和,用二维前缀和 (O(1)):
- 无限制的城市、学校:直接 DP,互不影响最后乘起来 :(O(nms))
- 有限制的城市、学校:绑在一起 DP:(O(km^2))(或 (O(k^2s^2m)))
谢谢,已经写吐了。
「十二省联考 2019」春节十二响
在子树结构中,考虑递归的先把儿子的最优解找到,然后考虑合并。
这里最优解定义为一个多重集,每个元素集选的一段的最大值。
考虑 (u) 的最优解用到的合并一定是儿子的若干最优解,因为不同子树不存在祖先关系所以互不影响,可以随意合并。
这样问题就变成了,有两个集合,你要将他们合并,一次操作可以是:
- 各选择一个集合中的元素,删除,加入一个元素,值是这俩的 (max)。
若合并 (k) 次,两组集合各选择最大的 (k) 个即可。
这样每次合并,可以使总数减掉一个最大值的 (min),任意调整都会出现减掉的东西更少。
用 ( ext{set}) 维护最优解,任意的 ( ext{swap}) 是 (O(1)) 的,合并一个就少一个,复杂度 (O(n log n))。
「十二省联考 2019」希望
绝 望
[六省联考2017]期末考试
枚举最晚完成时间,贪心匹配。复杂度线性。
[六省联考2017]组合数问题
化为组合意义:从 (nk) 个物品选 (i) 个物品满足 (imod k = r) ,(k) 很小,矩阵快速幂即可。
md 我个垃圾还想了好久。
[六省联考 2017] 相逢是问候
暴力 80 就离谱。
用扩展欧拉定理把指数降下来,考虑 (k) 次迭代,每次模的数是原来的一个 (phi),考虑每两次 (phi) 至少下降 (2) 倍(有一个 (2) 质因子,奇数变偶)。
设迭代到 (1) 次数是 (s)。
那么迭代次数 (> s) 答案都是一样的,所以可以暴力改,每个元素最多改 (log) 次,每次改,倒着递推即可,记得处理边界即需要加的情况。
这样是 3 只 (log),考虑同底光速幂,这样就做到了两只 log。
md 只有这种联考难度能让我想出三题正解。。