实在无法理解第三个数据点
查看原帖
实在无法理解第三个数据点
473763
WangWuuaa楼主2022/9/24 20:48
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline int rd(){
	int s=0,w=1;char ch=getchar();
	while(ch<48||ch>57){if(ch==45)w=-1;ch=getchar();}
	while(ch>47&&ch<58)s=(s<<3)+(s<<1)+ch-48,ch=getchar();
	return s*w;
}
const int N=59;
bool mp[N][N];
struct node{
	int x,y,d,t;
};
vector<pair<int,int> > vis[N][N];
queue<node> q;
int n,m,si,sj,ei,ej,dir;
inline bool judge(int x,int y,int d,int t){
	if(x<1 || y<1 || x>n || y>m) return 0;
	if(mp[x][y]) return 0;
	if(!vis[x][y].empty()){
		for(int i=0;i<vis[x][y].size();++i){
			int fd=vis[x][y][i].first;
			int st=vis[x][y][i].second;
			if(fd==d) return 0;
			if((fd-d+4)%4==1 && t<=st-1) return 0;
			if((fd-d+4)%4==2 && t<=st-2) return 0;
		}
	}
	return 1;
}
inline bool in(int x,int y,int d,int t){
	if(judge(x,y,d,t)){
		if(x==ei && y==ej){
			cout<<t;
			exit(0);
		}
		q.push(node{x,y,d,t});
		vis[x][y].push_back(make_pair(d,t));
		return 1;
	}
	return 0;
}
signed main(){
	n=rd(),m=rd();
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			mp[i][j]=rd();
			if(mp[i][j]){
				mp[i-1][j]=1;
				mp[i][j-1]=1;
				mp[i-1][j-1]=1;
			}
		}
	}
	sj=rd(),si=rd(),ej=rd(),ei=rd();
	char ct=getchar();
	if(ct=='N') dir=0;
	else if(ct=='W') dir=1;
	else if(ct=='S') dir=2;
	else dir=3;
	in(si,sj,dir,0);
	while(!q.empty()){
		node nt=q.front();
		q.pop();
		int x=nt.x,y=nt.y;
		int d=nt.d,t=nt.t;
		++t;
		in(x,y,(d+1)%4,t);
		in(x,y,(d+3)%4,t);
		if(!d){
			if(in(x-1,y,d,t))
			if(in(x-2,y,d,t))
			in(x-3,y,d,t);
		}else if(d==1){
			if(in(x,y-1,d,t))
			if(in(x,y-2,d,t))
			in(x,y-3,d,t);
		}else if(d==2){
			if(in(x+1,y,d,t))
			if(in(x+2,y,d,t))
			in(x+3,y,d,t);
		}else{
			if(in(x,y+1,d,t))
			if(in(x,y+2,d,t))
			in(x,y+3,d,t);
		}
	}
	puts("-1");
}
6 7
0 0 0 0 0 0 0
0 0 0 0 1 0 0
0 0 1 0 0 0 0
0 0 1 0 0 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 0
1 1 1 6 E

我真的觉得是输出3,但是答案为什么是11啊

2022/9/24 20:48
加载中...