94pts求条
查看原帖
94pts求条
947061
Xr0701楼主2024/8/23 16:54

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;
}
2024/8/23 16:54
加载中...