是“查错”
by Drinkkk @ 2017-10-16 21:27:35
修改后48分,求教~
```cpp
#include <cstdio>
#include <cstring>
char ma[101][101];
char st[10001];
int dx=0,dy=0;
void push(char str,int num)
{
for(int i=1;i<=num;i++)
{
for(int j=1;j<=8;j++)
{
ma[0][j]='.';
ma[j][0]='.';
}
if(str=='^')
{
if(ma[dx-1][dy]=='.' && dx-1>=1)
{
ma[dx-1][dy]='^';
ma[dx][dy]='.';
dx--;
}
else
{
if(dx-1<1)
{
continue;
}
int nx=dx-1,ny=dy;
while(ma[nx][ny]!='.')
{
nx--;
}
if(nx<1)
{
nx=1;
}
for(int j=nx;j<=dx;j++)
{
// printf("j=%d\n",j);
ma[j-1][ny]=ma[j][ny];
}
ma[dx][dy]='.';
dx--;
}
}
else if(str=='v')
{
if(ma[dx+1][dy]=='.' && dx+1<=8)
{
ma[dx+1][dy]='v';
ma[dx][dy]='.';
dx++;
}
else
{
if(dx+1>8)
{
continue;
}
int nx=dx+1,ny=dy;
while(ma[nx][ny]!='.')
{
nx++;
}
if(nx>8)
{
nx=8;
}
for(int j=nx;j>=dx;j--)
{
// printf("j=%d\n",j);
ma[j+1][ny]=ma[j][ny];
}
ma[dx][dy]='.';
dx++;
}
}
else if(str=='<')
{
if(ma[dx][dy-1]=='.' && dy-1>=1)
{
ma[dx][dy-1]='<';
ma[dx][dy]='.';
dy--;
}
else
{
if(dy-1<1)
{
continue;
}
int nx=dx,ny=dy-1;
while(ma[nx][ny]!='.')
{
ny--;
}
if(ny<1)
{
ny=1;
}
for(int j=ny;j<=dy;j++)
{
// printf("j=%d\n",j);
ma[nx][j-1]=ma[nx][j];
}
ma[dx][dy]='.';
dy--;
}
}
else if(str=='>')
{
if(ma[dx][dy+1]=='.' && dy+1<=8)
{
ma[dx][dy+1]='>';
ma[dx][dy]='.';
dy++;
}
else
{
if(dy+1>8)
{
continue;
}
int nx=dx,ny=dy+1;
while(ma[nx][ny]!='.')
{
ny++;
}
if(ny>8)
{
ny=8;
}
for(int j=ny;j>=dy;j--)
{
// printf("j=%d\n",j);
ma[nx][j+1]=ma[nx][j];
}
ma[dx][dy]='.';
dy++;
}
}
}
}
int main()
{
for(int i=1;i<=8;i++)
{
scanf("%s",ma[i]+1);
}
for(int i=1;i<=8;i++)
{
bool bj=false;
for(int j=1;j<=8;j++)
{
if(ma[i][j]=='^' || ma[i][j]=='<' || ma[i][j]=='>' || ma[i][j]=='v')
{
dx=i;
dy=j;
bj=true;
break;
}
}
if(bj==true)
{
break;
}
}
while(true)
{
int flag=-999999999,number=0,len=0;
gets(st+1);
if(st[1]=='#')
{
break;
}
len=strlen(st+1);
for(int i=1;i<=len;i++)
{
if(st[i]=='m' && st[i+1]=='o' && st[i+2]=='v' && st[i+3]=='e')
{
flag=1;
break;
}
if(st[i]=='t' && st[i+1]=='u' && st[i+2]=='r' && st[i+3]=='n')
{
for(int j=i+(3+1);j<=len;j++)
{
if(st[j]=='l' && st[j+1]=='e' && st[j+2]=='f' && st[j+3]=='t')
{
flag=2;
}
if(st[j]=='r' && st[j+1]=='i' && st[j+2]=='g' && st[j+3]=='h' && st[j+4]=='t')
{
flag=3;
}
if(st[j]=='b' && st[j+1]=='a' && st[j+2]=='c' && st[j+3]=='k')
{
flag=4;
}
}
}
}
if(flag==1)
{
for(int i=1;i<=len;i++)
{
if(st[i]>='0' && st[i]<='9')
{
number=number*10+st[i]-'0';
}
}
}
//printf("flag=%d\n",flag);
if(flag==1)
{
push(ma[dx][dy],number);
}
else if(flag>=2 && flag<=4)
{
if(flag==2)
{
if(ma[dx][dy]=='^')
{
ma[dx][dy]='<';
}
else if(ma[dx][dy]=='v')
{
ma[dx][dy]='>';
}
else if(ma[dx][dy]=='<')
{
ma[dx][dy]='v';
}
else if(ma[dx][dy]=='>')
{
ma[dx][dy]='^';
}
}
else if(flag==3)
{
if(ma[dx][dy]=='^')
{
ma[dx][dy]='>';
}
else if(ma[dx][dy]=='v')
{
ma[dx][dy]='<';
}
else if(ma[dx][dy]=='<')
{
ma[dx][dy]='^';
}
else if(ma[dx][dy]=='>')
{
ma[dx][dy]='v';
}
}
else if(flag==4)
{
if(ma[dx][dy]=='^')
{
ma[dx][dy]='v';
}
else if(ma[dx][dy]=='v')
{
ma[dx][dy]='^';
}
else if(ma[dx][dy]=='<')
{
ma[dx][dy]='>';
}
else if(ma[dx][dy]=='>')
{
ma[dx][dy]='<';
}
}
}
// for(int i=1;i<=8;i++)
// {
// for(int j=1;j<=8;j++)
// {
// printf("%c",ma[i][j]);
// }
// printf("\n");
// }
}
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
{
printf("%c",ma[i][j]);
}
printf("\n");
}
//printf("dx=%d,dy=%d\n",dx,dy);
return 0;
}
```
/\*
.....c..
.p..A..t
D..>T.Pr
....aP.P
p.d.C...
.....p.R
........
........
move 2
turn right
move 3
turn left
turn left
move 1
#
\*/
by Drinkkk @ 2017-10-18 07:52:45
想问一下各位,为什么测试点2 RE,自测又没事?
by Drinkkk @ 2017-10-18 14:02:46
$T$$1$$T$
by Drinkkk @ 2017-11-07 12:36:01
$T$$1$
by Drinkkk @ 2017-11-07 12:36:28