MLE求助 题目ID:3586

#include <bits/stdc++.h>
#define mem(a,b) memset((a),(b),sizeof(a))
#define MP make_pair
#define pb push_back
#define row first
#define arrange second
#define sz(x) (int)x.size()
#define all(x) x.begin(),x.end()
#define sqr(x) (x)*(x)
#define REP(i,j) for(int i=0;i<j;i++)
#define REP1(i,j) for(int i=1;i<=j;i++)
#define REP2(i,j) for(int i=j;i>=1;i--)
#pragma GCC optimize("O3")
using namespace std;
using namespace __gnu_cxx;
typedef int I;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<I,I> PIi;
typedef pair<ll,ll> PLL;
typedef pair<I,ll> PIL;
typedef pair<ll,I> PLI;
typedef vector<I> VI;
typedef vector<ll> VL;
typedef vector<PIi> VPII;
typedef vector<string> VS;
typedef greater<I> GI;
typedef priority_queue<I> PQI;
typedef priority_queue<I,VI,GI> PQV;
/************* define end  *************/
void println(VI x){for(I i=0;i<sz(x);i++) printf("%d%c",x[i]," \n"[i==sz(x)-1]);}
void println(VL x){for(I i=0;i<sz(x);i++) printf("%lld%c",x[i]," \n"[i==sz(x)-1]);}
void println(I *x,I l,I r){for(I i=l;i<=r;i++) printf("%d%c",x[i]," \n"[i==r]);}
void println(ll *x,I l,I r){for(I i=l;i<=r;i++) printf("%lld%c",x[i]," \n"[i==r]);}
void pri(ll x,ll y){printf("%lld %lld\n",x,y);}
void pri(I x,I y){printf("%d %d",x,y);}
void pri(ll x){printf("%lld\n",x);}
void pri(int x){printf("%d\n",x);}
/*************** IO end  ***************/
void go();//主函数
int main(){
	//#ifdef tokitsukaze
		//freopen("TEST.txt","r",stdin);
	//#endif
	go();return 0;
}
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return x*f;
}
const int INF=0x3f3f3f3f;
const ll LLINF=0x3f3f3f3f3f3f3f3fLL;
const double PI=acos(-1.0);
const double eps=1e-6;
const int MAX=1e5;
const ll mod=998244353;
/*********************************  head  *********************************/
struct PII{
	int row,arrange,step;
};
int map_row=read(),map_arrange=read(),all_shortest=INF;
PII my_point,friend_point;
char __map[201][201];
int way_row[4]={1,-1,0,0};
int way_arrange[4]={0,0,1,-1};
int bfs(int KFC_point_row,int KFC_point_arrange,int is_me_or_friend){
	int start_row,start_arrange;
	if(is_me_or_friend)start_row=my_point.row,start_arrange=my_point.arrange;
	else start_row=friend_point.row,start_arrange=friend_point.arrange;
	queue<PII> now_point;
	now_point.push({start_row,start_arrange,0});
	while(!now_point.empty()){
		PII now=now_point.front();
		now_point.pop();
		if(now.row==KFC_point_row && now.arrange==KFC_point_arrange)return now.step;
		for(int way=0;way<4;way++){
			if(now.row+way_row[way]<=map_row && now.row+way_row[way]>=1 && now.arrange+way_arrange[way]<=map_arrange && now.arrange+way_arrange[way]>=1 && __map[now.row+way_row[way]][now.arrange+way_arrange[way]]!='#'){
				now_point.push({now.row+way_row[way],now.arrange+way_arrange[way],now.step+1});
			}
		}
	}
	return INF; 
}
void go(){
	REP1(i,map_row){
		REP1(j,map_arrange){
			cin>>__map[i][j];
			if(__map[i][j]=='@')my_point.row=i,my_point.arrange=j;
			if(__map[i][j]=='&')friend_point.row=i,friend_point.arrange=j;
		}
	}
	int my_shortest,friend_shortest;
	REP1(i,map_row){
		REP1(j,map_arrange){
			if(__map[i][j]=='F')my_shortest=bfs(i,j,1),friend_shortest=bfs(i,j,0);
			all_shortest=min(all_shortest,my_shortest+friend_shortest);
		}
	}
	if(all_shortest==INF)printf("Meeting cancelled");
	else pri(all_shortest);
	return ;
}

(空间限制128M)

2 个赞