记录编号 135868 评测结果 AAAAAAAAAA
题目名称 不听话的机器人 最终得分 100
用户昵称 Gravatar水中音 是否通过 通过
代码语言 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;
}