记录编号 |
135868 |
评测结果 |
AAAAAAAAAA |
题目名称 |
不听话的机器人 |
最终得分 |
100 |
用户昵称 |
水中音 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.849 s |
提交时间 |
2014-11-01 20:07:30 |
内存使用 |
3.47 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
char s[101],word;
bool mmap[101][101]={0};
int f[2][4][101][101]={0};
int x0,y0,n,m,i,j,p,k,zh1=1,zh0=0,ans;
int MAX(int x,int y){if(x>y)return x;else return y;}
void myinit()
{
scanf("%d%d%d%d",&n,&m,&x0,&y0);
for(i=1;i<=n;i++)
{
scanf("%s",s+1);
for(p=1;p<=n;p++)
if(s[p]=='.')mmap[i][p]=true;
}
for(k=0;k<=1;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(p=0;p<4;p++)
f[k][p][i][j]=-1000;
f[1][0][x0][y0]=0;
}
void DPworkL()
{//0上1右2下3左
for(p=1;p<=n;p++)//x坐标
for(j=1;j<=n;j++)//y坐标
if(mmap[p][j])
{
f[zh0][0][p][j]=MAX(f[zh1][1][p][j]+1,f[zh1][0][p][j]);
f[zh0][1][p][j]=MAX(f[zh1][2][p][j]+1,f[zh1][1][p][j]);
f[zh0][2][p][j]=MAX(f[zh1][3][p][j]+1,f[zh1][2][p][j]);
f[zh0][3][p][j]=MAX(f[zh1][0][p][j]+1,f[zh1][3][p][j]);
}
zh0^=1;zh1^=1;
}
void DPworkR()
{
for(p=1;p<=n;p++)
for(j=1;j<=n;j++)
if(mmap[p][j])
{
f[zh0][0][p][j]=MAX(f[zh1][3][p][j]+1,f[zh1][0][p][j]);
f[zh0][1][p][j]=MAX(f[zh1][0][p][j]+1,f[zh1][1][p][j]);
f[zh0][2][p][j]=MAX(f[zh1][1][p][j]+1,f[zh1][2][p][j]);
f[zh0][3][p][j]=MAX(f[zh1][2][p][j]+1,f[zh1][3][p][j]);
}
zh0^=1;zh1^=1;
}
void DPworkF()
{
for(p=1;p<=n;p++)
for(j=1;j<=n;j++)
if(mmap[p][j])
{
f[zh0][0][p][j]=f[zh1][0][p][j];
f[zh0][1][p][j]=f[zh1][1][p][j];
f[zh0][2][p][j]=f[zh1][2][p][j];
f[zh0][3][p][j]=f[zh1][3][p][j];
if(mmap[p+1][j])f[zh0][0][p][j]=MAX(f[zh1][0][p+1][j]+1,f[zh1][0][p][j]);
if(mmap[p][j-1])f[zh0][1][p][j]=MAX(f[zh1][1][p][j-1]+1,f[zh1][1][p][j]);
if(mmap[p-1][j])f[zh0][2][p][j]=MAX(f[zh1][2][p-1][j]+1,f[zh1][2][p][j]);
if(mmap[p][j+1])f[zh0][3][p][j]=MAX(f[zh1][3][p][j+1]+1,f[zh1][3][p][j]);
}
zh0^=1;zh1^=1;
}
void DPworkB()
{
for(p=1;p<=n;p++)
for(j=1;j<=n;j++)
if(mmap[p][j])
{
f[zh0][0][p][j]=f[zh1][0][p][j];
f[zh0][1][p][j]=f[zh1][1][p][j];
f[zh0][2][p][j]=f[zh1][2][p][j];
f[zh0][3][p][j]=f[zh1][3][p][j];
if(mmap[p-1][j])f[zh0][0][p][j]=MAX(f[zh1][0][p-1][j]+1,f[zh1][0][p][j]);
if(mmap[p][j+1])f[zh0][1][p][j]=MAX(f[zh1][1][p][j+1]+1,f[zh1][1][p][j]);
if(mmap[p+1][j])f[zh0][2][p][j]=MAX(f[zh1][2][p+1][j]+1,f[zh1][2][p][j]);
if(mmap[p][j-1])f[zh0][3][p][j]=MAX(f[zh1][3][p][j-1]+1,f[zh1][3][p][j]);
}
zh0^=1;zh1^=1;
}
void mywork()
{
for(i=1;i<=m;i++)
{
scanf("%s",s);
word=s[0];
if(word=='F')DPworkF();
else if(word=='B')DPworkB();
else if(word=='L')DPworkL();
else if(word=='R')DPworkR();
}
}
void PRint()
{
ans=0;
for(i=1;i<=n;i++)
for(p=1;p<=n;p++)
for(j=0;j<4;j++)
ans=MAX(ans,f[zh1][j][i][p]);
ans=m-ans;
printf("%d\n",ans);
}
int main()
{
freopen("nrobot.in","r",stdin);
freopen("nrobot.out","w",stdout);
myinit();
mywork();
PRint();
return 0;
}