反射计数(200)
- 给定一个包含0 、1的二维矩阵;
- 一个物体从给定的初始位置出发,在给定的速度下移动,遇到矩阵的边缘则发生镜面反射,无论物体经过0还是1,都不影响其速度;
- 经过t时间单位后,物体经过1点的次数(初始位置为1也计入);
输入描述:
第一行为初始信息 w h x y sx sy t
w h 为矩阵的宽度、高度 w在(0,100) h在(0,1000)
x y 为初始位置,x对应的列索引,y对应行索引;
sx sy 为初始速度,范围 [-1, 1],正方向为右或者下
t 为经过的时间,范围 [0, 100)
输出描述:
经过1的次数
示例1
输入:
12 7 2 1 1 -1 13
001000010000
001000010000
001000010000
001000010000
001000010000
001000010000
001000010000
输出:
3
思路:
- 简单模拟过程即可,注意起点为1时计入在内;
- 行走过程
# 输入第一行数据
w, h, x, y, sx, sy, t = [int(x) for x in input().split()]
# 0 1 矩阵
matrix = [[0 for i in range(w)] for j in range(h)]
for i in range(h):
input_str = input().strip()
for j in range(w):
matrix[i][j] = int(input_str[j])
# 起始位置开始走
if matrix[y][x] == 1:
result = 1
else:
result = 0
while True:
if t == 0: # 时间已走完
break
else:
# 列 的反射
if (x + sx < 0) or (x + sx > w - 1):
sx = -sx
# 行 的反射
elif (y + sy < 0) or (y + sy > h - 1):
sy = -sy # 反射
# 走一步
x += sx
y += sy
if matrix[y][x] == 1:
result += 1
t -= 1
print(result)