问题描述
给定一个 m × n m \times n m×n的方格,有 c c c种颜色的染料,每一种染料有 c [ i ] c[i] c[i]升,每涂一个格子需要1L,对于某个格子上下左右4邻域的格子不能染成和本身格子一样的颜色,求是否能够找到染色方案?(保证升数总和和格子总数一致。)
问题分析
由抽屉原理可知,把多于 n n n个的物体放到 n n n个抽屉里,则至少有一个抽屉里的东西不少于两件。此外,因为相邻格子的横纵坐标和奇偶性不同,所以可以将奇数视作一种组合,偶数视作一种组合。因此,当有一种染料的升数多于某一种集合大小,则必定存在相邻各自颜色相同。
代码示例
n, m, c = map(int, input().split())
color_list = list(map(int, input().split()))
res = (n * m + 1) // 2
flag = True if max(color_list) <= res else False
if flag:
print('YES')
else:
print('NO')