题目描述
二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。
对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根
小易想知道最多可以放多少块蛋糕在网格盒子里。
输入描述:
每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)
输出描述:
输出一个最多可以放的蛋糕数
示例1
输入
3 2
输出
4
# 不要二 找数据逻辑
# 举个例子,就可以找出规律,是以4为周期重复出现的
# 1 1 x x 1 1
# 1 1 x x 1 1
# x x 1 1 x x
# x x 1 1 x x
# 首先,左上角一定是可以放置蛋糕的,然后因为题目要求任意两个蛋糕之间的欧几里得距离不能为2,
# 而对于整数坐标位置来说,欧几里得距离为2的情况下只有垂直或者水平距离为2,像斜对角的距离不可能为2的。
# 就此先简单推断第一行的蛋糕位置,假设1为可放置,0为不可放置,则第一行应该为:110011001100...,
# 因此可以看出是以4为一个周期,而纵方向也同样如此:110011001100...因此需要对横纵坐标依次遍历通过周期4进行判断,
w, h = map(int, input().split())
array = [[0 for k in range(h)] for m in range(w)]
# 整个纵向查找
for i in range(w):
if i%4 == 0 or i%4 == 1:
# 横向查找
for j in range(h):
if j%4 == 0 or j%4 == 1:
array[i][j] = 1
else:
for j in range(h):
if j%4 == 2 or j%4 == 3:
array[i][j] = 1
sum = 0
for i in range(w):
for j in range(h):
sum += array[i][j]
print(sum)