题意:
一只乌龟,最开始在坐标原点上,他有四种操作,如下:
F:向当前方向前进一步(乌龟的初始方向是向上↑);
B:向当前方向的相反方向前进一步;
L:向左转90度,不进行移动;
R:向右转90度,不进行移动;
现在给出你一个字符串,由FBLR组成,问乌龟走完路径之后,他走过的点覆盖的面积。
思路:
模拟即可,没什么可说的。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<sstream>
using namespace std;
char com[550];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",com);
int len=strlen(com);
int x=0,y=0;
int dir=1;
int minx=0;
int miny=0;
int maxx=0;
int maxy=0;
for(int i=0;i<len;i++)
{
if(com[i]=='F')
{
if(dir==1)
{
y++;
miny=min(y,miny);
maxy=max(y,maxy);
}
else if(dir==2)
{
x++;
minx=min(x,minx);
maxx=max(x,maxx);
}
else if(dir==3)
{
y--;
miny=min(y,miny);
maxy=max(y,maxy);
}
else
{
x--;
minx=min(x,minx);
maxx=max(x,maxx);
}
}
else if(com[i]=='B')
{
if(dir==1)
{
y--;
miny=min(y,miny);
maxy=max(y,maxy);
}
else if(dir==2)
{
x--;
minx=min(x,minx);
maxx=max(x,maxx);
}
else if(dir==3)
{
y++;
miny=min(y,miny);
maxy=max(y,maxy);
}
else
{
x++;
minx=min(x,minx);
maxx=max(x,maxx);
}
}
else if(com[i]=='L')
{
if(dir==1)
dir=4;
else if(dir==2)
dir=1;
else if(dir==3)
dir=2;
else
dir=3;
}
else if(com[i]=='R')
{
if(dir==1)
dir=2;
else if(dir==2)
dir=3;
else if(dir==3)
dir=4;
else
dir=1;
}
}
int ans=(maxx-minx)*(maxy-miny);
printf("%d\n",ans);
}
return 0;
}