1 条题解

  • 0
    @ 2025-8-24 21:35:04

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Alanalan
    **

    搬运于2025-08-24 21:35:04,当前版本为作者最后更新于2018-07-08 14:57:28,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    #include<bits/stdc++.h>
    using namespace std;
    #define N 16385
    const int INF=0x3f3f3f3f;
    const int dx[]={0,0,1,-1};
    const int dy[]={1,-1,0,0};
    const int ddx[]={0,0,1,1,1,-1,-1,-1};
    const int ddy[]={1,-1,-1,0,1,-1,0,1};
    string s[N];//n*m<=16000
    vector<int> dis[N];
    struct node
    {
        int x,y;
    };
    int n,m;
    queue<node> q;
    bool ok(int x,int y)
    {
        return x>=0 && x<n && y>=0 && y<m && s[x][y]=='O';
    }
    void bfs(int sx,int sy)
    {
        for(int i=0;i<n;++i)
            for(int j=0;j<m;++j)
                dis[i][j]=INF;
        q.push(node{sx,sy});
        dis[sx][sy]=0;
        while(!q.empty())
        {
            int x=q.front().x;
            int y=q.front().y;
            q.pop();
            for(int i=0;i<4;++i)//四个方向
            {
                int xx=x+dx[i];
                int yy=y+dy[i];
                if(ok(xx,yy) && dis[xx][yy]==INF)
                {
                    dis[xx][yy]=dis[x][y]+1;
                    q.push(node{xx,yy});
                }
            }
        }
    }
    int main()
    {
        cin>>n>>m;
        for(int i=0;i<n;++i)
        {
            cin>>s[i];
            dis[i].resize(m+1);//规定每个vector长度
        }
        int sx,sy,ex,ey;
        while(cin>>ex>>ey>>sx>>sy)
        {
            if(!ex&&!ey&&!sx&&!sy) break;
            --ex;--ey;--sx;--sy;
            bfs(sx,sy);
            int ans=dis[ex][ey];
            for(int i=0;i<8;++i)
            {
                int x=ex,y=ey;
                while(ok(x+ddx[i],y+ddy[i]))
                {
                    x+=ddx[i];
                    y+=ddy[i];
                    ans=min(ans,dis[x][y]);
                }
            }
            if(ans==INF) puts("Poor Harry");
            else printf("%d\n",ans);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1194
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者