题意:
还是输入灰度阵,不过是方阵,给定一个范围r,方阵某个点的邻域内(包括边界,超过边界的按边界算)灰度值的平均值如果小于等于某个值t,那么这个区域就是灰度区域? 求方阵中灰度区域的个数。
输入:
n r t l
灰度方阵
输出:
灰度区域的个数
思路:
一开始墨迹半天,画下来之后就清晰了很多。主要就是找到方阵中这个位置的邻域边界,这个边界一定是规则的矩形(方形也算),所以找到四个角的位置坐标就好,然后在这个矩形范围内把每一块灰度的值加起来,和 t*区域内点的个数 比较(不取平均值,那样涉及到浮点数,数据类型不好整而且还可能出现精度问题)。其中,区域内点的个数可以用四个角的坐标计算。
未解:
1. 只拿了70,后面数据 TLE (超时),应该是我四层for循环那超时了。后来想到了如果加的过程中,灰度总值已经超过了 t*区域内点的个数 ,那就不用比较了(因为这个点的邻域灰度平均值一定大于 t 了(区域点的个数已经确定了呀!)),于是用 if break 剪枝,但还是超时,可能问题不出现在这吧。
解题实况:
1. 解题过程一开始只求了超出边界按边界计算的情况,没超出的忘记处理了。
2. 调试功能有问题,于是手动把 T count_t 方阵输出,看结果就很明显,这个可以沿用。
3. 注释也不能出现中文,搞得我写注释还得想想咋翻译,不过后来另外在一个txt文件里面把思路捋了捋。平时可以注意一下全英文编程。
总结:
不管咋说,这次过了哈哈哈。