zoukankan      html  css  js  c++  java
  • P4771 八百标兵奔北坡

    题目背景

    baingbaboom正在往北边跑!!!

    题目描述

    现在在一张N*M的地图上有K只babingbaboom!!!对于一张地图上的点都有一个 h_{i,j}hi,j 来表示这个地方的高度。现在这些babingbaboom都想要跑到北边的一个山坡上。求出离每一个babingbaboom最近的靠北的山。

    补充定义:

    山:

    山的周围没有比它更高的地方。(四联通)

    在北边:

    令Babingbaboom的坐标为A(a,b)A(a,b),山的坐标为B(x,y)B(x,y),山在Babingbaboom的北边当且仅当dis_{A,B}==a-xdisA,B==ax

    切比雪夫距离:

    A(x_1,y_1) qquad B(x_2,y_2) : qquad dis_{A,B}=max(|x_1 - x_2|, |y_1 - y_2|)A(x1,y1)B(x2,y2):disA,B=max(x1x2,y1y2)

    输入格式

    第1行三个正整数N,M,K。 第2-N+1行每行有M个正整数 h_{i,j}hi,j 。 第N+2-N+K+1行每行有两个正整数X_i,Y_i表示每一个babingbaboom的坐标。

    输出格式

    K行。如果对于每一个babingbaboom存在这样的最近的山(切比雪夫距离),就输出这个babingbaboom到山的切比雪夫距离;否则输出“Pool Babingbaboom!”(不要引号!(我知道可怜的是Poor,但是我就爱写Pool))

    输入输出样例

    输入 #1
    5 5 5
    1 2 3 4 5
    2 3 4 5 1
    3 4 5 1 2
    4 5 1 2 3
    5 1 2 3 4
    1 2
    2 3
    3 4
    4 5
    5 1
    
    输出 #1
    Pool Babingbaboom!
    Pool Babingbaboom!
    1
    2
    0

    说明/提示

    1 leqslant N,M leqslant 1e31N,M1e3

    1 leqslant K leqslant 1e51K1e5

    1 leqslant h_{i,j} leqslant 1e91hi,j1e9

    数据有梯度!

    样例图片(星代表一个Babingbaboom,红色代表一个山):  (竖的是x,横的是y。画的时候没注意,很抱

    歉。)

    #include<iostream>
    #include<iomanip>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int n,m,k,h[1005][1005],f[1005][1005];
    
    inline int read(){
        int s=0,w=1;
        char ch=getchar();
        while(ch<'0'||ch>'9'){
            if(ch=='-'){
                w=-1;
            }
            ch=getchar();
        }
        while(ch>='0'&&ch<='9'){
            s=s*10+ch-'0';
            ch=getchar();
        }
        return s*w;
    }
    
    int main(){
        n=read();
        m=read();
        k=read();
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                h[i][j]=read();
            }
        }
        memset(f,0x3f,sizeof(f));
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(h[i][j]>h[i-1][j]&&h[i][j]>h[i+1][j]&&h[i][j]>h[i][j+1]&&h[i][j]>h[i][j-1]){
                    f[i][j]=0;
                }
                   else{
                    f[i][j]=min(f[i-1][j],min(f[i-1][j-1],f[i-1][j+1]))+1;
                }
            }
        }
        for(int i=1;i<=k;i++){
            int x,y;
            x=read();
            y=read();
            if(f[x][y]>10000){
                printf("Pool Babingbaboom!
    ");
            }
            else{
                printf("%d
    ",f[x][y]);
            }
        }
    }
  • 相关阅读:
    Easy | LeetCode 154 | 剑指 Offer 11. 旋转数组的最小数字 | 二分法
    Easy | 剑指 Offer 17. 打印从1到最大的n位数 | 大数
    Easy | LeetCode 191 | 剑指 Offer 15. 二进制中1的个数 | 位运算
    Easy | 剑指 Offer 57
    Medium | LeetCode 15. 三数之和 | 双指针法
    jq load()方法实现html 模块化。
    vue 剪切图片上传头像,使用 cropperjs 实现
    vue 的nextTick的理解
    使用nodejs进行开发,concurrently模块,使我们同时执行多个命令。
    cookie生命周期expires 时间过期,但是cookie没有被浏览器清理的问题
  • 原文地址:https://www.cnblogs.com/hrj1/p/11774715.html
Copyright © 2011-2022 走看看