内蒙古自治区网站建设_网站建设公司_Figma_seo优化
2025/12/20 18:10:46 网站建设 项目流程

题目链接

题目大意

给定用东西南北表示的路线,让你使用左右和直行来表示

Solution

这是一道模拟题,只要顺着他给定的方向走就行,但是对于像我一样出门不分南北东西的人来说有点困难。

首先可以发现给定的路线不会出现相邻的相反指令,比如南后面就是北,东后面就是西这类的,那么路线改变时一定是发生了一次向左走或向右走。那么其实转变成左右指令时,原本的一条指令就会被拆成两条指令,分别为转向和直行距离,如果我们第一次面向的方向就是原第一条指令的方向时,第一条指令就只需要直行距离这条指令代替就行,那么总指令数为 \(1+2*(n-1)\)

然后我们就开始进行转向操作,为了照顾像我一样的路痴,下面是一张方向标:

我们可以通过看这张图防止自己绕晕,具体来说为:

  1. 如果面朝北方,那么左转是西,右转是东。
  2. 如果面朝东方,那么左转是北,右转是南。
  3. 如果面朝南方,那么左转是东,右转是西。
  4. 如果面朝西方,那么左转是南,右转是北。

然后就是按照这个模拟就好了,具体看代码。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+6;
inline int read(){int x=0,f=1;char c=getchar();while(c<'0' || c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0' && c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
struct Node{char c;int x;
}s[N];
int T=read();
int main(){while(T--){int n=read();for(int i=1;i<=n;i++){cin>>s[i].c;s[i].x=read();}printf("%d %c\nZ %d\n",1+(n-1)*2,s[1].c,s[1].x);//初始朝向为第一条指令的方向 char last=s[1].c;for(int i=2;i<=n;i++){if(last=='N'){//面朝北方if(s[i].c=='E') puts("R");//右转是东else if(s[i].c=='W') puts("L");//左转是西} else if(last=='E'){//面朝东方if(s[i].c=='S') puts("R");//右转是南else if(s[i].c=='N') puts("L");//左转是北}else if(last=='S'){//面朝南方if(s[i].c=='W') puts("R");//右转是西else if(s[i].c=='E') puts("L");//左转是东}else if(last=='W'){//面朝西方if(s[i].c=='N') puts("R");//右转是北else if(s[i].c=='S') puts("L");//左转是南}printf("Z %d\n",s[i].x);last=s[i].c;}}return 0;
}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询