解题思路:
引用自作者:胜利归来 https://blog.dotcpp.com/wangkaixuan01/
对每一组数据建立一个大小为10*5的数组,这里记为A
A[i][0]表示出现在图中最靠上的数字i的横坐标
A[i][1]表示出现在图中最靠下的数字i的横坐标
A[i][2]表示出现在图中最靠左的数字i的横坐标
A[i][3]表示出现在图中最靠右的数字i的横坐标
A[i][4]数字i在图中出现的次数
如果玩具摆放满足要求,那么所有在图中出现过的数字i满足
(A[i][1]-A[i][0]+1)*(A[i][3]-A[i][2]+1)= A[i][4]
注意事项:
参考代码:
from cmath import inf
k = int(input().strip())
for t in range(k):
A = [[inf,0,inf,0,0] for i in range(10)] #建立标记数组A
n,m = map(int,input().strip().split())
for x in range(n):
B = list(map(int,list(input().strip())))
for y in range(m):
num = B[y]
A[num][4] = A[num][4]+1 #更新数字num出现的次数
if x < A[num][0]: #更新数字num最靠上的值
A[num][0] = x
if x > A[num][1]: #更新数字num最靠下的值
A[num][1] = x
if y < A[num][2]: #更新数字num最靠左的值
A[num][2] = y
if y > A[num][3]: #更新数字num最靠右的值
A[num][3] = y
flag = 1 #判断结果
for i in range(10):
if A[i][4]:
if (A[i][1]-A[i][0]+1)*(A[i][3]-A[i][2]+1) != A[i][4]:
flag = 0
break
if flag:
print('YES')
else:
print('NO')0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复