OD C卷 - 反射计数

文章描述了如何通过编程模拟一个物体在二维矩阵中按照给定速度移动,遇到边界时进行镜面反射,计算经过矩阵中值为1的点的总次数。作者给出了一个简单的Python代码实现和一个示例输入输出过程。
摘要由CSDN通过智能技术生成

反射计数(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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值