求助
查看原帖
求助
497817
羊摆摇楼主2024/8/8 21:33

本地能正常运行,洛谷编译失败,不知道怎么回事

#include <bits/stdc++.h>
using namespace std;

#define debug cout<<"Ok"<<endl;
#define sc second
#define fr first
#define pb push_back
#define LL long long
typedef const int Int;
typedef pair<int,int> pii;

Int N=1005,M=105;

int m,n,x0,y0;

char c[M][M];

string ops;

int op[N];

int dp[2][M][M][5];

int dx[5]={0,1,0,-1};
int dy[5]={1,0,-1,0};

int main(){
	cin.tie(0);
	memset(dp,0x3f,sizeof(dp));
	scanf("%d%d%d%d",&m,&n,&x0,&y0);
	dp[0][x0][y0][1]=0;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++)cin>>c[i][j];
	}
	for(int i=1;i<=n;i++){
		cin>>ops;
		if(ops=="FORWARD")op[i]=1;
		else if(ops=="BACK")op[i]=2;
		else if(ops=="LEFT")op[i]=3;
		else op[i]=4;
	}
	for(int i=1;i<=n;i++){
		int pre=(i&1)^1,nw=i&1;
		for(int x=1;x<=m;x++){
			for(int y=1;y<=m;y++){
				for(int j=1;j<=4;j++)dp[nw][x][y][j]=dp[pre][x][y][j]+1;
			}
		}
		if(op[i]==1){
			for(int x=1;x<=m;x++){
				for(int y=1;y<=m;y++){
					for(int j=1;j<=4;j++)dp[nw][x][y][j]=min(dp[nw][x][y][j],dp[pre][x-dx[j]][y-dy[j]][j]);
				}
			}
		}
		else if(op[i]==2){
			for(int x=1;x<=m;x++){
				for(int y=1;y<=m;y++){
					for(int j=1;j<=4;j++)dp[nw][x][y][j]=min(dp[nw][x][y][j],dp[pre][x+dx[j]][y+dy[j]][j]);
				}
			}
		}
		else if(op[i]==3){
			for(int x=1;x<=m;x++){
				for(int y=1;y<=m;y++){
					for(int j=1;j<=4;j++)dp[nw][x][y][j]=min(dp[nw][x][y][j],dp[pre][x][y][(j==1)?4:j-1]);
				}
			}
		}
		else{
			for(int x=1;x<=m;x++){
				for(int y=1;y<=m;y++){
					for(int j=1;j<=4;j++)dp[nw][x][y][j]=min(dp[nw][x][y][j],dp[pre][x][y][(j==4)?1:j+1]);
				}
			}
		}
	}
	int ans=INT_MAX;
	for(int x=1;x<=m;x++){
		for(int y=1;y<=m;y++){
			for(int j=1;j<=4;j++)if(c[x][y]=='.')ans=min(ans,dp[(n&1)][x][y][j]);
		}
	}
	printf("%d",ans);
	return 0;
}











2024/8/8 21:33
加载中...