ACGO || 正经题解
2026-09-05 13:29:05
发布于:江苏
8阅读
0回复
0点赞
题目大意
机器人从第 p 盏灯出发,按照初始方向在 n 盏灯之间往返移动。每次操作先点亮当前位置,再移动一格;如果下一格越界,则先掉头再移动。
求 q 次操作后每盏灯被点亮的次数。
题解思路
按照题意直接模拟机器人的位置和方向。
使用 dir 表示当前方向:向右时为 1,向左时为 −1。每次操作先令当前位置的计数加一,再检查 p+dir 是否越界。如果越界,就令 dir=-dir,最后移动到 p+dir。
当 n=1 时,机器人不会移动,唯一一盏灯会被点亮 q 次,对此情况单独处理。
参考代码
#include <bits/stdc++.h>
using namespace std;
long long ans[200010];
int main(){
int n,p;
long long q;
char op;
cin>>n>>q>>p>>op;
if(n==1){
cout<<q<<endl;
return 0;
}
int dir;
if(op=='R'){
dir=1;
}
else{
dir=-1;
}
for(long long i=1;i<=q;i++){
ans[p]++;
if(p+dir<1||p+dir>n){
dir=-dir;
}
p=p+dir;
}
for(int i=1;i<=n;i++){
cout<<ans[i];
if(i<n){
cout<<" ";
}
}
cout<<endl;
return 0;
}
这里空空如也

有帮助,赞一个