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!\n");
        }
        else{
            printf("%d\n",f[x][y]);
        }
    }
}

 

posted @ 2019-11-01 00:08  魂兮龙游  阅读(213)  评论(0编辑  收藏  举报