• GRYZ 模 拟 赛 系 列 之 迷 宫(不就是个洪水)


     

    -

    迷 宫

    (maze.cpp/c/pas)

    Description

    Karles 和朋友到迷宫玩耍,没想到遇上了 10000000 年一次的大洪水,好在 Karles 是一个喜

    欢思考的人,他发现迷宫的地形和洪水有如下性质:

    ①迷宫可以被看做是一个 N*M 的矩形方阵,其中左上角坐标为(1,1),右下角坐标为(n,m),

    每个格子(i,j)都有一个高度 h(i,j)。

    ②洪水从(sx,sy)开始,如果一个格子被洪水淹没,那这个格子四周比它低(或相同)的格子

    也会被淹没。

    现在 Karles 想请你帮忙算算,有多少个格子不会被淹没,以及 Karles 想问一下格子(x,y)是否

    被淹没,如果被淹没的话就输出”Yes”,否则输出”No”。

    Input

    第一行包含两个整数 n,m。

    以下 n 行,每行 m 个数,第 i 行第 j 个数表示格子高度 h(i,j)。

    下面一行包含两个整数 sx,sy,表示最初被洪水淹没的格子。

    下面一行包含一个整数 q,表示询问的数量。

    最后 q 行每行包含两个整数 x,y,表示询问的格子。

    Output

    输出的第一行,为永远不会被淹没的格子的数量。

    以下 q 行,为格子被淹没的情况,输出”Yes”或者”No”(不包含引号)

    Example

    maze.in maze.out

    3 3

    1 2 3

    2 3 4

    3 4 5

    2 2

    2

    1 2

    2 3

    5

    Yes

    No

    Hint

    对于 10%的数据,(sx,sy)为迷宫内的最高点。

    对于 30%的数据,1<=N,M<=5,q=1。

    对于 60%的数据,1<=N,M<=100,q<=100。

    对于 100%的数据,1<=N,M<=2000,q<=1000。

    这个题,很水,但是,文件名多敲了一个空格所以0分;23333

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<string>
    using namespace std;
    int n,m;
    int hill[2010][2010];
    bool mdzz[2010][2010];
    int tot=0;
    
    
    void dfs(int x,int y)
    {
        tot++;
        mdzz[x][y]=1;
        if(x+1<=n&&hill[x+1][y]<=hill[x][y]&&mdzz[x+1][y]==0)
        dfs(x+1,y);
        if(x-1>=1&&hill[x-1][y]<=hill[x][y]&&mdzz[x-1][y]==0)
        dfs(x-1,y);
        if(y+1<=m&&hill[x][y+1]<=hill[x][y]&&mdzz[x][y+1]==0)
        dfs(x,y+1);
        if(y-1>=1&&hill[x][y-1]<=hill[x][y]&&mdzz[x][y-1]==0)
        dfs(x,y-1);
        else return;
    }
    
    
    int main()
    {
        freopen("maze.in","r",stdin);
        freopen("maze.out","w",stdout);
        int sx,sy;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&hill[i][j]);
            mdzz[i][j]=0;
        }
        scanf("%d%d",&sx,&sy);
        dfs(sx,sy);
        printf("%d
    ",m*n-tot);
        int saber;
        int qwq,qaq;
        scanf("%d",&saber);
        for(int i=1;i<=saber;i++){
        scanf("%d%d",&qwq,&qaq);
        if(mdzz[qwq][qaq]==0)printf("No
    ");
        else printf("Yes
    ");
        }
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
  • 相关阅读:
    DELLR720 独立显卡DVI转VGA问题
    淘宝开源项目之Tsar
    remmina rdp远程连接windows
    linux 下查看硬件信息(mac,IP地址,硬盘型号,序列号等)
    Ubuntu16.04下安装googlechrome flash 插件和安装网易云音乐
    Linux实现crontab每秒秒执行
    Supervisord
    es 加磁盘扩容
    通知神器——java调用钉钉群自定义机器人
    python 退出程序的方式
  • 原文地址:https://www.cnblogs.com/sssy/p/6679704.html
Copyright © 2020-2023  润新知