所以MLE是什么鬼?
查看原帖
所以MLE是什么鬼?
389797
Nemonade楼主2021/8/24 18:50
#include<bits/stdc++.h>
using namespace std;
const int MP=35;
struct node{
	int ax,ay;
	int bx,by;
	int sum;
}tn;
bool operator <(const node &a,const node &b){
	return a.sum<b.sum;
}
int dxya[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int dxyb[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
char mp[MP][MP];
int n,m,asx,asy,bsx,bsy,ex,ey;
map<node,bool> vis;
void bfs(){
	queue<node> q;
	tn.ax=asx,tn.ay=asy;
	tn.bx=bsx,tn.by=bsy;
	tn.sum=0;
	q.push(tn);
	while(!q.empty()){
		node tmp=q.front();q.pop();
		int sum=tmp.sum;
		int ax=tmp.ax,ay=tmp.ay;
		int bx=tmp.bx,by=tmp.by;
		if(vis[tmp]) continue;
		tmp.sum=0;vis[tmp]=true;
		if(ax==bx&&ay==by&&ax==ex&&ay==ey){
			cout<<sum;return;
		}
		for(register int i=0;i<4;++i){
			int tax=ax+dxya[i][0],tay=ay+dxya[i][1];
			int tbx=bx+dxyb[i][0],tby=by+dxyb[i][1];
			if(mp[tax][tay]=='X') continue;
			if(mp[tbx][tby]=='X') continue;
			if(mp[tax][tay]=='#') tax=ax,tay=ay;
			if(mp[tbx][tby]=='#') tbx=bx,tby=by;
			tn.ax=tax,tn.ay=tay;
			tn.bx=tbx,tn.by=tby;
			tn.sum=sum+1;
			q.push(tn);
		}
	}
	puts("no");
	return;
}
inline bool islian(int x,int y,int xx,int yy){
	queue<pair<int,int> > q;
	q.push({x,y});
	while(!q.empty()){
		pair<int,int> tmp=q.front();q.pop();
		int dx=tmp.first,dy=tmp.second;
		if(dx==xx&&dy==yy) return true;
		for(register int i=0;i<4;++i){
			int tx=dx+dxya[i][0],ty=dy+dxya[i][1];
			if(mp[tx][ty]=='#'||mp[tx][ty]=='X') continue;
			q.push({tx,ty});
		}
	}
	return false;
}
int main(){
	cin>>n>>m;
	for(register int i=1;i<=n;++i){for(register int j=1;j<=m;++j){
		cin>>mp[i][j];
		if(mp[i][j]=='M') asx=i,asy=j;
		if(mp[i][j]=='G') bsx=i,bsy=j;
		if(mp[i][j]=='T') ex=i,ey=j;
	}}
	if(!islian(asx,asy,ex,ey)||!islian(bsx,bsy,ex,ey)){
		puts("no");return 0;
	}
	bfs();
	return 0;
}

RT,MLE30分

2021/8/24 18:50
加载中...