链接
http://www.lydsy.com/JudgeOnline/problem.php?id=4512
题解
可以直接模拟。
显然平面被划分成几块,答案就是几-1。
如果篱笆在行走的过程中相交,那就会产生一个新的区域,这个时候
ans++
。
代码
//乱搞题
#include <cstdio>
#include <algorithm>
#include <map>
#define maxn 2001
using namespace std;
int e[maxn][maxn][5], N, opt[maxn], vis[maxn][maxn],
walk[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
char s[maxn];
int main()
{
freopen("in.txt","r",stdin);
int i, x, y, tx, ty, ans=0;
scanf("%d%s",&N,s+1);
for(i=1;i<=N;i++)
{
if(s[i]=='N')opt[i]=0;
if(s[i]=='E')opt[i]=2;
if(s[i]=='S')opt[i]=1;
if(s[i]=='W')opt[i]=3;
}
x=y=1000;
vis[x][y]=1;
for(i=1;i<=N;i++)
{
tx=x+walk[opt[i]][0], ty=y+walk[opt[i]][1];
if(!e[x][y][opt[i]])
{
e[x][y][opt[i]]=e[tx][ty][opt[i]^1]=1;
if(vis[tx][ty])ans++;
}
vis[tx][ty]=1;
x=tx, y=ty;
}
printf("%d",ans);
return 0;
}