题解
先构造出没有障碍的方案
然后对于每个障碍,讨论他周围的点的情况…画个图分析一下就可以了
代码
#include <cstdio>
#define N 1010
char f[N][N];
int n,m,p;
int main(){
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
f[i][j]=(i&1)?'D':'G';
for(int i=1;i<=n;i++){
if(i<n) f[i][1]='P';
if(i>1 && (i&1)) f[i][2]='L';
if(!(i&1)) f[i][m]='L';
}
for(int i=1;i<=p;i++){
int x,y;scanf("%d%d",&x,&y);
if(x&1){
f[x+1][y-1]='L';
f[x-1][y+2]='P';
f[x][y+2]='P';
f[x][y+3]='L';
}else{
if(y==3){
f[x][1]='G';
f[x][2]='P';
f[x+1][2]='D';
f[x+1][5]='L';
}else{
f[x+1][y+2]='L';
f[x-1][y-1]='P';
f[x][y-1]='P';
f[x][y-2]='L';
}
}
}
int x=1,y=1;
n=n*m-4*p;
printf("TAK\n");
while(n--){
putchar(f[x][y]);
if(f[x][y]=='L') x--;
else if(f[x][y]=='P') x++;
else if(f[x][y]=='D') y--;
else y++;
}
return 0;
}