MLE???
查看原帖
MLE???
1088700
IakIOI_________Never楼主2024/7/31 19:57

自己也没有开多大的数组,样例也输出正常,请问各位大佬,帮我指出 MLE 原因。 code:

#include <bits/stdc++.h>
using namespace std;
char a[1005][1005];
int n, m, b[1005][1005], c[1005][1005], da = 0, f;
void dfs1(int x, int y){
	if(x<0||x>=n||y<0||y>=n||f==0||f==1||x<1&&a[x][y]=='u'||x>=n - 1&&a[x][y]=='d'||y<1&&a[x][y]=='l'||y>=n - 1&&a[x][y]=='r'){
		if(f!=1){
			f = 0;
		}
		return;
	}
	if(a[x][y]=='o'||b[x][y]!=-1){
		f = 1;
		return;
	}
	if(x>=1&&a[x][y]=='u'){
		c[x - 1][y] = 1;
		dfs1(x - 1, y);
	}
	if(x<=n - 2&&a[x][y]=='d'){
		c[x + 1][y] = 1;
		dfs1(x + 1, y);
	}
	if(y>=1&&a[x][y]=='l'){
		c[x][y - 1] = 1;
		dfs1(x, y - 1);
	}
	if(y<=n - 2&&a[x][y]=='r'){
		c[x][y + 1] = 1;
		dfs1(x, y + 1);
	}
}
void dfs2(int x, int y){
	if(x<0||x>=n||y<0||y>=n){
		return;
	}
	if(f==1&&!c[x][y]){
		da++;
	}
	if(a[x][y]=='o'||b[x][y]!=-1){
		da++;
		return;
	}
	if(x>=1&&a[x][y]=='u'){
		dfs2(x - 1, y);
		b[x - 1][y] = f;
	}
	if(x<=n - 2&&a[x][y]=='d'){
		dfs2(x + 1, y);
		b[x + 1][y] = f;
	}
	if(y>=1&&a[x][y]=='l'){
		dfs2(x, y - 1);
		b[x][y - 1] = f;
	}
	if(y<=n - 2&&a[x][y]=='r'){
		dfs2(x, y + 1);
		b[x][y + 1] = f;
	}
}
int main(){
	scanf("%d %d", &n, &m);
	memset(b, -1, sizeof(b));
	memset(c, 0, sizeof(c));
	for(int i = 0;i<=n - 1;i++){
		scanf("%s", a[i]);
	}
	for(int i = 0;i<=n - 1;i++){
		for(int j = 0;j<=m - 1;j++){
			f = 2;
			if(b[i][j]==-1){
				c[i][j] = 1;
				dfs1(i, j);
				if(f!=2){
					dfs2(i, j);
				}
			}else if(b[i][j]==1){
				da++;
			}
		}
	}
	printf("%d", da);
	return 0;
}
2024/7/31 19:57
加载中...