为啥re了
  • 板块P1189 SEARCH
  • 楼主yyewenh
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/21 17:07
  • 上次更新2023/10/27 06:39:53
查看原帖
为啥re了
229529
yyewenh楼主2022/10/21 17:07
#include<iostream>
#include<cstdio>
using namespace std;
const int N=51;
int r,c,n,mp[N][N],now[N*N][1010][2],num[1010];
void dfsn(int x,int y,int w){
	if(x-1>=1)
	for(int i=x-1;i>=1;i--)
	if(mp[i][y]){
		now[++num[w]][w][0]=i;
		now[num[w]][w][1]=y;
	}
	else break;
}
void dfsw(int x,int y,int w){
	if(y-1>=1)
	for(int i=y-1;i>=1;i--)
	if(mp[x][i]){
		now[++num[w]][w][0]=x;
		now[num[w]][w][1]=i;
	}
	else break;
}
void dfss(int x,int y,int w){
	if(x+1<=r)
	for(int i=x+1;i<=r;i++)
	if(mp[i][y]){
		now[++num[w]][w][0]=i;
		now[num[w]][w][1]=y;
	}
	else break;
}
void dfse(int x,int y,int w){
	if(y+1<=c)
	for(int i=y+1;i<=c;i++)
	if(mp[x][i]){
		now[++num[w]][w][0]=x;
		now[num[w]][w][1]=i;
	}
	else break;
}
int main(){
    scanf("%d%d",&r,&c);
	for(int i=1;i<=r;i++)
	 for(int j=1;j<=c;j++){
		char x;cin>>x;
		if(x=='.'||x=='*')
		mp[i][j]=1;
		if(x=='*'){
			now[++num[0]][0][0]=i;
			now[num[0]][0][1]=j;
		}
	 }
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		string x;cin>>x;
		for(int j=1;j<=num[i-1];j++){
			//printf("%d %d %d\n",now[j][i-1][0],now[j][i-1][1],i-1);
			if(x=="NORTH")dfsn(now[j][i-1][0],now[j][i-1][1],i);
		    else if(x=="WEST")dfsw(now[j][i-1][0],now[j][i-1][1],i);
		    else if(x=="SOUTH")dfss(now[j][i-1][0],now[j][i-1][1],i);
		    else if(x=="EAST")dfse(now[j][i-1][0],now[j][i-1][1],i);
		}
		
	}
	for(int i=1;i<=num[n];i++){
		mp[now[i][n][0]][now[i][n][1]]=2;
		
	}
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++)
		if(mp[i][j]==0)printf("X");
		else if(mp[i][j]==1)printf(".");
		else printf("*");
		printf("\n");
	}
	 return 0;
}
2022/10/21 17:07
加载中...