rt
第22,36 个点WA了,第41个点TLE了
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0' || c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x*f;
}
void write(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
const int N=505;
int n,m;
int dis[N][N];
bool a[N][N];
int xx[2][4]={{1,1,-1,-1},{0,0,-1,-1}};
int yy[2][4]={{1,-1,-1,1},{0,-1,-1,0}};
struct ST{
int x,y,n;
};
inline void bfs(){
deque<ST> dq;
dq.push_back({1,1,0});
while(!dq.empty()){
ST t=dq.front();
dq.pop_front();
dis[t.x][t.y]=t.n;
for(int i=0;i<4;i++){
int kx,ky;
kx=t.x+xx[0][i];
ky=t.y+yy[0][i];
if(kx<=0 || ky<=0 || kx>n+1 || ky>m+1 || dis[kx][ky]!=-1) continue;
if(i&1){
if(a[t.x+xx[1][i]][t.y+yy[1][i]]) dq.push_back({kx,ky,t.n+1});
else dq.push_front({kx,ky,t.n});
}
else{
if(a[t.x+xx[1][i]][t.y+yy[1][i]]) dq.push_front({kx,ky,t.n});
else dq.push_back({kx,ky,t.n+1});
}
}
}
}
int main(){
n=read(),m=read();
memset(dis,-1,sizeof dis);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c=getchar();
while(c!='\\' && c!='/') c=getchar();
a[i][j]=(c=='\\');
}
}
bfs();
if(dis[n+1][m+1]!=-1) write(dis[n+1][m+1]);
else puts("NO SOLUTION\n");
return 0;
}