B. 折返的粒子
折返的粒子
春招模拟赛第六场|Ant|2023.04.11研发岗笔试
- Status
- Done
- Rule
- IOI
- Problem
- 3
- Start at
- 2023-4-16 19:00
- End at
- 2023-4-16 20:20
- Duration
- 1.3 hour(s)
- Host
- Partic.
- 91
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
按照题目的思路模拟即可。
#include <bits/stdc++.h>
using namespace std;
在一个 n 行 m 列的矩形网格中,有一个粒子从某个格子沿对角线方向开始移动。粒子每秒移动一个格子,到达相邻的对角格子。当粒子碰到网格边界时会发生镜面反射,方向改变,参考下图:

粒子不断行进,永不停止。初始方向用长度为 2 的字符串给出,由字母 D(向下)、U(向上)、R(向右)、L(向左)组合而成,具体为 DR(右下)、DL(左下)、UR(右上)、UL(左上)之一。
给定网格大小、粒子的初始位置和初始方向,请你计算经过多少秒后粒子会首次回到初始格子(初始瞬间不计)。若粒子永远无法回到初始格子,则认为答案为 −1。
约束:
第一行包含两个整数 n 和 m,分别表示网格的行数和列数。 第二行包含两个整数 r 和 c 以及一个长度为 2 的字符串 d,表示粒子的初始行号、列号和方向。
输出一个整数,表示粒子首次回到初始格子经过的秒数。若永远无法回到,则输出 −1。
输入
3 3
2 2 DR
输出
2
说明
网格大小为 3×3,粒子从 (2,2) 出发,初始方向为右下(DR)。第 1 秒粒子移动到 (3,3) 并同时碰到下边界与右边界,发生镜面反射,方向变为左上(UL);第 2 秒由 (3,3) 沿左上方向移动回 (2,2),首次回到初始格子。因此答案为 2。
输入
3 4
1 1 UL
输出
12
说明
网格大小为 3×4,粒子初始位于 (1,1),方向为左上(UL)。由于起点恰在左上角,粒子瞬间受到上边界和左边界的反弹,实际运动方向变为右下(DR)。后续路径依次为:(1,1)→(2,2)→(3,3)→(2,4)→(1,3)→(2,2)→(3,1)→(2,2)→(1,3)→(2,4)→(3,3)→(2,2)→(1,1)。全程共经过 12 秒后首次回到起点。
输入
4 2
3 2 DR
输出
2
说明
网格大小为 4×2,粒子从 (3,2) 以右下方向(DR)出发。初始即位于右边界,因此立即反弹,实际初方向变为左下(DL)。第 1 秒到达 (4,1),同时碰下边界和左边界,方向变为右上(UR);第 2 秒从 (4,1) 移动到 (3,2),回到起点。答案为 2。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册