POI 2013
Bytecomputer
有一个显而易见又好证的性质:最后的序列一定是先一段 -1 ,然后有一段 0 ,最后是一段 1 。然后考虑 DP,\(f_{i,j}\) 表示把 \(i\) 变成 \(j\) 状态的最小操作次数。
然后转移很简单的。
Taxis
比较好想的是让能走路程多的先去 \(d\) 之前的位置接人。
因为这样浪费在去的路上的路程能让大车承担。
但是如果我们把大车都用光了,剩下的小车不能把人送到 \(m\) 也是不行的。
所以考虑预留一辆最小的大于 \(m-d\) 的车,然后再从大到小安排车。
整体是这样,但是还有细节
Walk
结论题,然后我他喵的不会证明,咋整啊。
不证明了就
Tales of seafaring
以每个点为起点,求任意两点间的最短路,这样你可以在一条边上反复横跳来满足条件。
但是这样是不行的,因为最短路上可能反复横跳 \(d\) 步就到不了终点了,所以两点之间奇数最短路和偶数最短路都要求。
然后需要判一下对应奇偶性的最短路是不是小于 \(d\) ,大于 \(d\) 就一定不行。
Polarization
首先最小的方案就是下一层和上一层连的方向相反,对数是 \(n-1\)
然后最多的就是根的子树要么都是向上指,要么都是向下指。
因为这样不仅让子树内都能连上,还能让子树间连接上一部分。
然后还有个结论就是根要选重心,证明不会。感性理解一下。
然后就是像一个背包的问题。因为你要决定子树的方向。
然后挺人类智慧的 qwq
因为最多有 \(\sqrt n\) 种物品,所以用二进制分组优化多重背包。然后用 bitset 优化一下。复杂度 \(O(n\frac {\sqrt n} {32})\)
Tower Defense Game
如果你选的点是本来就有塔的点,那你放在这一定没事。
如果你选的点不是本来有塔的点,那你距离原来覆盖自己的塔 1 ,原来的塔距离其他本应覆盖的点也为 1 ,相当于选了原来的塔。
所以就乱选就行了。只要每次选完把覆盖的点删掉就行。
Triumphal arch
二分,然后考虑 B 不会走回头路,因为这样就相当于啥也没干还浪费走的机会。
于是设 \(f_i\) 表示把 \(i\) 子树内所有点都染完除了走的时候用的点还需要多少次染色。
\(f_{p}=\sum {f_v+1} -K\)。
然后二分 \(K\)。
Take-out
感觉是栈的练习题。
但是我又想不到。
我是 2B
不重叠就用栈维护一下,当栈头 \(k+1\) 个 \(k\) 个白\(1\) 个黑弹出就完事了。
Price List
最短路只有几种方式生成。
一种 \(b>2a\) 就根本不用管。
另一种是 \(dis/2 \times b+a\) 就是把所有 \(a\) 替换一下,这个也好求。
然后还有可能就是绕一大圈回来全走的是 \(b\) 。
这种的走的第二步不用再走一次,所以可以将他删掉。
复杂度不会证。是根号大概。

浙公网安备 33010602011771号