晚测8

A:chinese

很好的题
(i*f[i]) 其实是就是求每个点作为炼字的方案数的和

每个点都是等效的 所以直接求一个点作为炼字 能有多少种方案
然后乘nm就好了

求一个点作为炼字的方案数
首先这个点可以是2~k中的任何一个数
而当这个点是i的时候
同一行和同一列的其它数是1~i-1中的任何一个数
所以这里的系数是((i-1)^{n+m-2})
此时其它点对它是否是炼字是没有影响的
可以随便选
所以最后再乘(k^{n*m-n-m+1})

结果就是一个点的方案数
最后乘上nm就是答案





B:physics
删除一个点不太好统计答案
因为将最大的矩形破坏之后 会有很多小矩形可能作为答案
但是如果将所有删除先进行
然后倒序加点
这样每次加入一个+
答案要么不变 要么在一个包含当前点的矩形中
所以就很好处理了
up数组 记录当前点往上有多少个连续的+
down数组 记录当前点往下有多少个连续的+

而答案从后往前单调不降是显然的
所以也就是求min{up[x][i]} + min(down[x][i]) - 1 > ans 是否成立
即是否存在一个长为k的区间 这个区间中最小的up 加上最小的down -1后大于ans
所以就是滑动窗口 可以用单调队列维护
其实这题时限比较宽 所以用堆也可以直接处理

原文地址:https://www.cnblogs.com/2004-08-20/p/13826934.html