标签:随机化 line 数据 解方程 删除 最短路 模拟 set class
T1:
? 数据范围显然状压,但考试时没有想到,打了个爆搜拿了70分
? 记录上行点亮状态和操作状态,枚举这行的操作状态进行dp就好了
?
T2:
? 计算方案数:
? 考虑按val从大到小向序列中插入,那么之后的元素对当前元素就没有影响
? 于是答案就是\(\prod _{i=1}^n min(i,key_i + sum_{val_i})\)
? 其中\(sum_{val_i}\)表示在\(i\)之前的等于\(val_i\)的元素个数
?
? 构造方案:
? 贪心的选择,每次选择能选的点中字典序最小的,然后将所有未选的且val比它小的点的key减1
? 当某个点的key减为1的时候,我们选择的点还应该满足val小于等于这个点
? 所以可以对val排序,用线段树维护字典序最小的点
? 区间key值减1,当key减到1时,将该点的val插入一个multiset中表示限制
? 当选择该点之后再在multiset中删除该权值
?
T3:
? 随机化可过……
? 正解:
? 考虑设\(dis_{i,j,k}\)表示从i到j经过k条x边的最短路,跑个分层图就可以算出
? 那么问题就转化为方程:
? \(min\{dis_{1,i,a}+a*x\}+min\{dis_{i,n,b}+b*x\}=min\{dis_{1,n,c}+c*x\}\)
? 是否有整数解
? 发现这三个min实际上是三个由一次函数构成的凸壳
? 那么我们可以维护三个凸壳(每段被哪个一次函数控制)
? 然后用三个凸壳的拐点划分区间,即可保证在每个区间内这三个函数都是直线的形式
? 那么就可以对每个区间解方程,看是否有在这个区间内的整数解即可
标签:随机化 line 数据 解方程 删除 最短路 模拟 set class
原文地址:https://www.cnblogs.com/Gkeng/p/11809809.html