CSP 202104-02 邻域灰度? 70分


题意:

还是输入灰度阵,不过是方阵,给定一个范围r,方阵某个点的邻域内(包括边界,超过边界的按边界算)灰度值的平均值如果小于等于某个值t,那么这个区域就是灰度区域? 求方阵中灰度区域的个数。

输入:

n r t l

灰度方阵

输出:

灰度区域的个数

思路:

一开始墨迹半天,画下来之后就清晰了很多。主要就是找到方阵中这个位置的邻域边界,这个边界一定是规则的矩形(方形也算),所以找到四个角的位置坐标就好,然后在这个矩形范围内把每一块灰度的值加起来,和 t*区域内点的个数 比较(不取平均值,那样涉及到浮点数,数据类型不好整而且还可能出现精度问题)。其中,区域内点的个数可以用四个角的坐标计算。

未解:

1. 只拿了70,后面数据 TLE (超时),应该是我四层for循环那超时了。后来想到了如果加的过程中,灰度总值已经超过了 t*区域内点的个数 ,那就不用比较了(因为这个点的邻域灰度平均值一定大于 t 了(区域点的个数已经确定了呀!)),于是用 if break 剪枝,但还是超时,可能问题不出现在这吧。

解题实况:

1. 解题过程一开始只求了超出边界按边界计算的情况,没超出的忘记处理了。

2. 调试功能有问题,于是手动把 T count_t 方阵输出,看结果就很明显,这个可以沿用。

3. 注释也不能出现中文,搞得我写注释还得想想咋翻译,不过后来另外在一个txt文件里面把思路捋了捋。平时可以注意一下全英文编程

 

总结:

不管咋说,这次过了哈哈哈。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM