26杭电暑期 3
赛时
赛时先开了“签到题” J
发现怎么怎么看怎么不会?我草好没思路
不会签到倒闭了
遂远离榜单随机开题,发现 C 似乎很有说法
是因为发现了 C 的倍增性质,接下来思考怎么用倍增的性质
发现只需要记录长度 DP 子序列和的最小值,一发过了
然后开 E 手玩发现其实是分配因子,那么显然均分最合适
一开始考虑错了,以为每次只令一个素因子的次数减一
后来发现是均分,就是所有因子的次数最优的情况下都是除以 \(2\) 的
发现只能处理 \(10^6\) 不过够用了,写了两发一发 MLE 了也是神了
另一发 TLE 了也是神了发现上限没改
接着跟榜看 I,
手玩着发现如果有一个答案只有一个题用它当备选决策,毫无疑问这个一定是确定的
这样就可以一层一层拓扑的消掉边,剩下的每个点两条出边。那一定是个环了
那么这样的话,要么全对,要么全错,就好算了
这个题居然犯唐爆了四发?
然后看了看 D 发现很网络流啊
不过网络流能过吗?网络流过了?!
后面尝试了一下 F 发现前一半还是可以做的
但是后一半到底是什么?怎么 J 题也不会?
倒闭了下播了
遂倒闭离场
赛后题解
感觉不会构造很多时候是没有找对构造的方向
那么构造的方向是什么呢?是乱搞
E
先给 \(x\) 做质因数分解
我们发现,题目里的找 \(a\times b=x\) 可以被理解成将 \(x\) 的每个质因子分配给这两个数
显然贪心的要让结果尽可能地大,那我们分配每个质因子就尽可能平均分配到这两个数
也就是说,单次所有质因子的系数减半,找到次数最高的质因子取对即可
接下来是对 \(10^18\) 规模的质因数分解质因式
不过考虑到这个东西至多写成两个 \(10^6\) 以上质因数的乘积,
只需要考虑这两个的次数即可,要么是两个 \(1\) 要么是一个 \(2\),
只有后者有用,直接验证即可
对于 \(10^6\) 以内的部分筛出来质数,对这部分照常质因数分解即可
C
注意到 \(a_i>\sum a_j\) 的形式,说明子序列的长度是对数级别
这样的话,根据贪心决策包容性,相同的子序列和越小越优
那么 \(g_{i,j}\) 表示取到第 \(i\) 位长度为 \(j\) 的子序列的最小值
这个状态转移方程看着是 \(O(n^2)\) 的,不过直接一个变量存最优决策就是 \(O(n\log V)\) 的了
I
画个图玩玩,把每个题目表示的点和每个答案表示的点连上边
发现如果有一个答案只有一个题用它当备选决策,
毫无疑问这个答案一定是确定给它连边的那个题的
那么那个题确定的另外一个答案就可以删掉了,
如果这样会导致一个新的答案只有一个题用它当备选决策,就重复
这个过程还是很类似拓扑的
直到不存在这样的题和答案为止,剩下的就一定是环
那么环上要么全对要么全错,无论如何期望都是 \(\frac{N}{2}\)
不同的环期望线性性加和即可
D
最小费用最大流的板子
连边是源点到孩子,孩子到玩具流量 \(1\) 费用 \(0\)
然后玩具到汇点连边是流量 \(1\) 费用 \(w_{i,j}\) 总共 \(y\) 条边
F
首先取后 \(\frac{n}{2}\) 个数,这些数肯定不会存在某个数是另一个数的倍数
这种情况一直会取到 \(\lceil\frac{n}{2}\rceil\) 为止,
再往下就会出现最后一个数/倒数第二个数是另一个数的倍数了,就不行了
然后考虑怎么构造,考虑任意数都可以写成 \(x\times 2^{f_x},2\not| x\) 的形式
我们取出所有的奇数,令这些 \(f_x\) 尽可能小,
如果要不能整除的话,需要同时要满足 \(\forall 2\not|k,f_x\geq f_{kx}+1\)
这样的话,可以递推出来 \(f_x=\lfloor\log_3\lfloor\frac{n}{x}\rfloor\rfloor\)
算出来所有 \(x\times 2^{f_x}\) 扔进去排序即可
H
首先算出每一位所有的合法填法,这个是传递闭包然后直接枚举子集去做。
当然算出来的应该是没有全零和全一的,将此方案数记为 \(C\)
假设我们得到了这一部分的合法填法,记为 \(C\)
令 \(f_{l}\) 表示填完前 \(l\) 位,是否存在数字卡上/下限或者同时卡住上下限(不一定是同一个)或者都没有卡上下限
如果都不卡上下限,那么下一位也是都卡不了上下限,那么下一位的填法有 \(C+2\) 种
如果只是卡了上限,那么下一位上限是 \(0\) 的情况下只能转移到卡上限填全 \(0\) 方案为 \(1\),
否则转移到双不卡的方案是填全 \(0\),一旦有一位是 \(1\) 就转移到卡上限,这部分方案算上全 \(1\) 是 \(C+1\)
卡下限同理,上限情形所有上改成下,\(0\) 改成 \(1\) 即可
卡双限是没有办法直接转移到双不卡的,
如果能只卡一边的话,方案只有全 \(0\) 或者全 \(1\),方案为 \(1\),当然这个是上下限不等的情况
如果上下限相等填全 \(0\) 和全 \(1\) 就还是双卡,方案为 \(1\)
如果是下限 \(0\) 上限 \(1\) 那么只要填 \(0\) 和 \(1\) 都带的就保持卡双限,方案为 \(C\)
否则双卡还下限 \(1\) 上限 \(0\) 那说明不合法,方案为 \(0\)
后面的带修优化考虑数据结构,发现这个可以写成矩阵乘法转移
那直接上线段树修改矩阵区间查矩阵乘法就行了
B
一开始只看了题解的几个关键词,发现是线性规划
于是先往线性规划的方向写了写,发现要同时考虑最小-最大
这个不是一边的,所以解最原始的线性规划是没办法的
先考虑最坏的情况,就是投入一元钱的收益最少的情况,
此时收益一元钱的就是最多的,我们去优化它的最小值
听起来好像和一开始直接考虑的没有区别,
不过考虑收益一元钱的最小投入,那么你就是有约束的
这个约束就是任意情况下收入不小于 \(1\)
然后我们有了这个之后求出这个最小投入,直接按此分配即可
那么现有的方式写完线性规划之后,按此法转置交换写其对偶形式

在此情况下,由于这两个问题都是有界的满足强对偶,这两个问题的最优解是相等的
所以转求对偶问题的最优解
对条件 \(1\) 进行变形,左边除以 \(x_i-1\) 然后加到条件 \(2\) 会得到 \(S\leq 1\)
直接把条件 \(1\) 的左边变形,可以得到 \(y_i\leq \frac{1}{x_i}\)
那么对于这个新的条件 \(1\) 左边累加如果不超过 \(1\) 这个就真就是 \(S\) 的最大值了
但是如果条件 \(1\) 的累加过了 \(1\) 那就是要卡条件 \(2\) 了
第二种情况是右边累加大于 \(1\) 了这个时候取不到
这个时候可以把条件 \(2\) 写成 \(S-\frac{x_i-1}{x_i}\leq y_i\) 的形式
再加上 \(y_i\geq 0\) 就可以累加得到 \(|A|S-\sum\limits_{i\in A}\frac{x_i-1}{x_i}\leq S\)
解得 \(|S|\leq\frac{\sum\limits_{i\in A}\frac{x_i-1}{x_i}}{|A|-1}\)
那么如果让限制尽可能严,选出来的 \(i\) 要满足 \(\frac{x_i-1}{x_i}\) 尽可能小
那么这样的话只需要按照 \(|A|\) 的大小挑出来 \(n\) 个最严的限制就行了

浙公网安备 33010602011771号