【CF374C】点2求
查看原帖
【CF374C】点2求
388829
Waterwzy楼主2021/7/20 19:50

蒟蒻求助dalao,为什么点2会MLE?

#include<bits/stdc++.h>
using namespace std;
int m,n,ans,maxx,ans1;
char a[1002][1002];
bool hl;
void dfs(int j,int i){
	if(j>n||j<1||i>m||i<1||hl==1)return;
	if(ans*4>m*n){
		hl=1;
		return;
	}
	if(a[j][i]=='D'){
		if(a[j-1][i]=='I')dfs(j-1,i);
		if(a[j+1][i]=='I')dfs(j+1,i);
		if(a[j][i-1]=='I')dfs(j,i-1);
		if(a[j][i+1]=='I')dfs(j,i+1);
	}
	else if(a[j][i]=='I'){
		if(a[j-1][i]=='M')dfs(j-1,i);
		if(a[j+1][i]=='M')dfs(j+1,i);
		if(a[j][i-1]=='M')dfs(j,i-1);
		if(a[j][i+1]=='M')dfs(j,i+1);
	}
	else if(a[j][i]=='M'){
		if(a[j-1][i]=='A')dfs(j-1,i);
		if(a[j+1][i]=='A')dfs(j+1,i);
		if(a[j][i-1]=='A')dfs(j,i-1);
		if(a[j][i+1]=='A')dfs(j,i+1);
	}
	else if(a[j][i]=='A'){
		ans1++;
		if(a[j-1][i]=='D')dfs(j-1,i);
		if(a[j+1][i]=='D')dfs(j+1,i);
		if(a[j][i-1]=='D')dfs(j,i-1);
		if(a[j][i+1]=='D')dfs(j,i+1);
	}
	if(a[j][i]=='A'){
		ans=max(ans,ans1);
		ans1--;
	}
}
int main(){
	cin>>m>>n;
	for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)cin>>a[j][i];
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(a[j][i]=='D'){
				dfs(j,i);
				if(hl==1){
					cout<<"Poor Inna!";
					return 0;
				}
				hl=0;
				maxx=max(maxx,ans);
				ans=0;
				ans1=0;
			}
		}
	}
	if(maxx==0)cout<<"Poor Dima!";
	else cout<<maxx;
	return 0;
}
2021/7/20 19:50
加载中...