86分求助
查看原帖
86分求助
1059234
FamousKillerconan楼主2025/8/4 22:38

TLE 7个点

#include<bits/stdc++.h>
#define int long long
#define PII pair<int,int>
#define endl "\n"
using namespace std;
const int N=5e2+5;
const int INF=1e9;
const double EPS=1e-6;
const int MOD=998244353;
char s[5]="\\/\\/",mp[N][N];
deque<PII>q;
int n,m,dis[N][N];
int dx[]={1,-1,-1,1},dy[]={1,1,-1,-1},ix[]={0,-1,-1,0},iy[]={0,0,-1,-1};
void bfs(){
	for(int i=0;i<=n;i++){
		for(int j=0;j<=m;j++){
			dis[i][j]=INF;
		}
	}
	q.push_back({0,0});
	dis[0][0]=0;
	while(!q.empty()){
		int x=q.front().first,y=q.front().second;
		q.pop_front();
		for(int i=0;i<4;i++){
			int xx=x+dx[i],yy=y+dy[i],ixx=x+ix[i],iyy=y+iy[i];
			if(xx>=0&&xx<=n&&yy>=0&&yy<=m){
				if(s[i]!=mp[ixx][iyy]){
					if(dis[x][y]+1<dis[xx][yy]){
						dis[xx][yy]=dis[x][y]+1;
						q.push_back({xx,yy});
					}
				}else{
					if(dis[x][y]<dis[xx][yy]){
						dis[xx][yy]=dis[x][y];
						q.push_back({xx,yy});
					}
				}
			}
		}
	}
	cout<<dis[n][m];
}
void solve(){
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>mp[i][j];	
		}
	}
	if((n+m)&1)cout<<"NO SOLUTION\n";
	else bfs();
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
    int T=1;
//	cin>>T;
    while(T--)solve();
    return 0;
}
2025/8/4 22:38
加载中...