OCI camp day 3
Game Design
可以发现,每次在横向移动与垂直移动之间切换的时候,可以将步长变为原先的两倍,这样一定不会与之前的任意一个格子相冲突。由于
什么时候会impossible呢?除了最终一直水平或者垂直移动之外,都可以构造。但是如何判断一直水平和垂直移动有一些tricky。举个例子:可以先左再右,或者先右再左。也就是说,可以至多变换方向一次。
那么怎么知道最终坐标呢?其实直接从
代码
Maximum Sum
线段树板子题,不说了。
Friends and Subsequences
尝试固定一个端点,比如左端点。
又要列不等式!
因为
但是二分有一些细节,因为你不能确保找得到这样的两个端点。所以找端点可以直接枚举一个长度至少为
如果存在两个端点,答案增加
Eliminating Balloons
反着遍历,对于所有
Set to Max (Hard Version)
因为最值是可覆盖的。所以需要优先处理那些连续的,当前值最小的
我当时用的很麻烦的标记做法,导致需要用线段树标记。现在看看直接用
Guess the Path (未补)
可以不断的将问题缩小至原先的一半,也就是divide and conquer.