寒假训练题解day3

 

Educational Round 166

C. Job Interview

最初想从后往前枚举缺失的人,这样前缀是不变的,只需要考虑后缀,但是后缀的变化不容易做。然后又想通过一个数据结构来在 $O(log{n})$ 时间内做出一个序列的值,发现不会。后面想到可以按照编程和测试来归类进行排序,多出来的一个人直接放到测试。排序之后再来枚举缺失的人,发现变化是可以 $O(1)$ 解决的。

Submission #300875473 - Codeforces


Round 996 (Div. 2)

C. The Trail

我一开始以为是n+m个方程n+m+1个未知数,有无穷多组解因此第一个数怎么填都行。后面发现无法通过第一个样例。其实,题目给出的并不是n+m个方程,而是n+m个式子相等。

img

如图,当 $n \neq m$ 时,每行每列求和只能为0。进而可以通过每行每列的值逐一计算出缺失的值。

Submission #300727866 - Codeforces


D. Scarecrow

把这个问题看成是一个追击和相遇问题。维护当前的时间 $t$ 和乌鸦所在位置 $s$ ,首先,第一个稻草人要前往位置0,然后第一个稻草人始终向右移动使乌鸦从k开始具有向右的速度。然后对于每个稻草人使用贪心,判断它在当前时间是否能让乌鸦向右瞬移k个单位,如果可以,那就瞬移,如果在乌鸦的左侧并且和乌鸦距离大于k,那就忽略,如果在乌鸦的右侧,看成一个相遇问题,相遇时乌鸦瞬移k。在此基础上,监视乌鸦位置,一旦 $s \geq l$ 那就输出当前时间。有一个小技巧是给所有距离都乘2,速度不变,那么我们的时间就一定是一个整数了,不会有任何精度损失。

Submission #300837762 - Codeforces