第一题 删数字
题目大意:给你一个
n
个数组成的序列
我的思路:我先从小到大排序,我们要使得任意两数差值的最大值与任意两数差值的最小值的和最小,可得最后剩下的数一定是一个连续串。我用单调队列来维护差的最小值,而差的最大值可以
第二题 最短路
题目大意:给出
N
个节点,
其实这道题,宽搜就行了。
第三题 病毒传播
题目大意:村庄中共有
k
最大
时限是两秒
我的做法:其实我在比赛的时候并没有想到正解,但是水了100分。我们可以发现我们设
a[i]
表示第
i
天感染病毒的人的集合,那么易得
标准做法:我要求 a[k] ,我可以先求 a[k/2] ,然后把 a[k/2] 相乘,同理,我要求 a[k/2] ,我可以先求 a[k/4] ,然后把 a[k/4] 相乘,直到要求的为 a[1] ,乘回去就行了。
第四题 屏保
题目大意:要求维护由
n
个点
n
,
对于一对 h[i],h[i+1] ,围成的区域,可得, [0,min(h[i],h[i+1)) 对答案的贡献是一个常数, [min(h[i],h[i+1),max(h[i],h[i+1])] 对答案的贡献是一个二次函数, (max(h[i],h[i+1]),hmax] 对答案的贡献是一个一次函数。我可以用线段树来维护二次项,一次项,常数项系数,更改时,直接简单在树上加减系数,求答案是,用线段树求系数,再把 x <script type="math/tex" id="MathJax-Element-47">x</script>带入二次函数的解。