P2130
  • 板块灌水区
  • 楼主stylus
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/24 17:28
  • 上次更新2024/6/24 20:42:50
查看原帖
P2130
836448
stylus楼主2024/6/24 17:28

都没人帮我 89错#8

#include<bits/stdc++.h>
#define st h.first
#define x h.second.first
#define y h.second.second
using namespace std;
int n,m,xx[4][2]={{0,1},{0,-1},{1,0},{-1,0}},c[2][1001][1001];
bool vis[1001][1001];
char a[1001][1001];
void bfs(){
  	queue<pair<int,pair<int,int> > >q;
  	q.push({0,{0,0}}),vis[0][0]=1;
  	while(q.size()){
    	auto h=q.front();
    	q.pop();
    	if(a[x][y]=='#'){
      		cout<<st;
     		return;
    	}for(int i=0;i<4;i++){
      		for(int j=0;j<10;j++){
        		int nx=x+(xx[i][0]<<j),ny=y+(xx[i][1]<<j);
       			if(nx<0||ny<0||nx>=n||ny>=m||a[nx][ny]=='X'||c[i>1][nx][ny]-c[i>1][x][y]>0)break;
       			if(vis[nx][ny])continue;
				vis[nx][ny]=1,q.push({st+1,{nx,ny}});
      		}
    	}
  	}cout<<-1;
  	return;
}
int main(){
  	cin>>n>>m;
  	for(int i=0;i<n;i++){
    	for(int j=0;j<m;j++)cin>>a[i][j],c[0][i][j]+=c[0][i][(!j?0:j-1)]+(a[i][j]=='X'),c[1][i][j]+=c[1][(!i?0:i-1)][j]+(a[i][j]=='X');
  	}bfs();
  return 0;
}
2024/6/24 17:28
加载中...