path - sol
代价的形式中对最⼤值和最⼩值的要求⽐较难处理,⽆法记录到最短路中直接计算,但可以将最⼤最⼩边均改成任意,即等价于对于每条路径可以选⼀条边免费,选⼀条边计算两次,问最短路。
这样我们最优解⼀定是在某条路径上最⼤边免费,最⼩边计算两次,否则更劣。
那么这样就可以求分层图最短路了,改为求 到
的最短路。对于一条边
边权为
,我们将
到
之间连接
的边;将
到
和
到
之间连接
的边;将
到
和
到
之间连接
的边。
设求出来的最短路为 。
此外还有一种只走一条边的情况没有考虑。我们只需要在最后输出的时候取 和
的最小值即可。
树 - sol
注意到 与运算 的一个性质:越 与 越小
考虑对于树上的任意一个节点 ,对与从它连出的一条树上路径
,满足
,由于最后是要求
故
劣于
。
也就是说,我们只需要考虑与某一点相连的点的贡献,即
对于每条边统计即可
sequence - sol
原式可化为
那么我们就能采用 “对撞”的方式,即:考虑每个 ,它对答案的贡献就是取模意义下与它相等的
的个数。
需要注意 需要是不同的元素。
average - sol
由于牛客公式里不知道为什么打不出 + 号,这里写了个- -1。
原 CF1003C 加强版
二分一个答案,假设当前二分出来的答案是 ,如果存在更优的解,那么必定存在一个区间
使得
我们把数列中的每一个数减去 ,然后判断是否存在一个长度符合条件的区间满足它的和大于
。
我们维护前缀和以及前缀和的后缀最大值,那么从左往右扫一遍就可以判断了。
什么是好的数组?- sol
易知 和
其中之一必须是整个数组里的最小值。
那么我们可以把 数组从小到大排序。
- 当
输出
Yes
- 否则,寻找和
互质的另一个最小的
,如果不存在这样的
输出
Yes
。否则,遍历数组,判断是否满足题目要求。
操作 - sol
模拟
lucky number -sol
数据较小,可以遍历。