首先本题中有一个细节容易被忽略:
算最大值时有一句 Max=max(Max,node[i].y);
,这句删掉应该不行因为可以比如 (5,0)→(6,1)→(7,2) 然后下降 →(8,1)→(9,0)(n=9),如果 只有 (1,1),(2,0),(3,0),(4,1),(5,0) 和 (6,1) 是定点那最高点是 (7,2) 可是会被误判,数据没有体现这一点。
还有代码里有一段:
if(f[i][1]||!node[i].y){
Max=max(Max,(node[i].x-node[i-1].x+node[i-1].y+node[i].y)>>1);
}
如果此时 f[i][1] 的精确值恰好为 mod 的倍数会被 % 成 0,最终不更新,但是实际要更新,只是因为恰好 % 成了 0,把模数设置成 2×mod 是无效的,总是可以被卡。
解决方法我认为有两种:
一种是如果取模后 =0(原来不为 0)就设为 mod,因为没有减法,具体可能还要一个 tmp 代替加法结果或者 flag 记录是否加过来时限。
还有一种就是每个数打个标记,记录是否 >0。
如何 Hack 还是请教大佬吧,毕竟我在这一块比较菜。
貌似可以把自己 Hack 掉?(光速逃
我 Hack 我 自 己