题意:给一个数组,至少一个位置是空的,要求给所有的空的位置填上同一个数字x,使得相邻两个数字的差最小,有多种x输出任意一种。
题解:显然相邻两个数字的差,要么是固定的两个数字提供的,要么就是一个数字和一个空位提供的(两个空位之间是没有差的)。只需要找到空位两边的最大值和最小值,这个时候x肯定是选择这俩的平均值(假如有两个平均值,选择任意一个)。
题意:在n个数字0中,选恰好m个变成1。使得这个数字字符串中,包含至少一个1的子串最多。输出最多有多少个包含至少一个1的子串。
题解:子串个数是恒定的,所以等价于要全是0的子串最少。打表发现貌似是平均分配0的情况下满足题意。写了一个这个东西。
总结:注意有k个1,是把0分成k+1份,注意特判不够分的情况,这时平均值的下整是0,有可能会RE:dividing by zero。
题解:不妨设 \(m>=n\) 一开始想到一种策略,就是逐行扫描,每次走到最右然后折返到最左,再向下移动,这样至多移动 \(n*(m-1)*2+(n-1)\) 次,写出了一种(蠢的,浪费步骤的)实现,交上去WA了。想到左右向的边已经充分利用了,但是只用了向下的一条完整的边。考虑上面的构造肯定是不优的,因为我到了左下角之后至少还能向上走回去。再想想可以在回来的时候逐列扫描,也就是每次先向上走,再向下走,到底边之后再向左移动。发现这样的构造是可以遍历所有的边的,所以答案就是这种遍历所有边的构造。