codevs3411 洪水

题目描述 Description

小浣熊松松和朋友到野外露营,没想到遇上了π年一次的大洪水,好在松松是一只爱观察的小浣熊,他发现露营地的地形和洪水有如下性质:

①露营地可以被看做是一个N*M的矩形方阵,其中左上角坐标为(1,1),右下角坐标为(n,m),每个格子(i,j)都有一个高度h(i,j)。

②洪水送(r,c)开始,如果一个格子被洪水淹没,那这个格子四周比它低(或相同)的格子也会被淹没。

现在松松想请你帮忙算算,有多少个格子不会被淹没,便于他和朋友逃脱。

【原有误数据已删除】

输入描述 Input Description

第一行包含两个整数n,m,表示矩形方阵右下角坐标。

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

最后一行包含两个整数r,c,表示最初被洪水淹没的格子。

输出描述 Output Description

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

样例输入 Sample Input

3 3

1 2 3

2 3 4

3 4 5

2 2

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

对于90%的数据,保证随机生成。

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

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>

using namespace std;
const int maxn = 2005;
int j[maxn][maxn],room[maxn][maxn];
long long int total = 0,m,n;
struct pos{
    int x;
    int y;
};
pos q[4000000];
pos dir[4];

int bfs(int y,int x){
    int h = 0,t = 0;
    q[0].y = y;
    q[0].x = x;
    int tx,ty;
    while(h <= t){

        int r3 = 0;
        for(r3 = 0;r3 <  4;r3++){
            x = q[h].x;
            y = q[h].y;
            tx = dir[r3].x;
            ty = dir[r3].y;
            if(y + ty >= 0 && y + ty < n && x + tx >= 0 && x + tx < m && room[y + ty][x + tx] && j[y + ty][x + tx]){
                t++;
                q[t].y = y + ty;
                q[t].x = x + tx;
                j[y + ty][x + tx] = 0;
                total--;
            }
        }
        h++ ;
    }
}

int main(){
    cin>>n>>m;
    dir[0].x = -1;dir[0].y = 0;
    dir[1].x = +1;dir[1].y = 0;
    dir[2].x = 0;dir[2].y = -1;
    dir[3].x = 0;dir[3].y = +1;
    char cmd;
    int r1 = 0,r2 = 0,temp = -1;
    for(r1 = 0;r1 < n;r1++){
        for(r2 = 0;r2 < m;r2++){
            cin>>cmd;
            if(cmd == ‘.‘) {
            j[r1][r2] = 1;
            room[r1][r2] = 1;
            total++;
        }else if(cmd == ‘#‘){
            j[r1][r2] = 1;
            room[r1][r2] = 0;
        }
        }
    }
    r1 = r2 =0;
    for(r1 = 0;r1 < n;r1++){
        for(r2 = 0;r2 < m;r2++){
            if(room[r1][r2] && j[r1][r2]){
                j[r1][r2] = 0;
                bfs(r1,r2);
            }

        }
    }
    cout<<total;
    return 0;
}
时间: 2024-12-28 15:31:16

codevs3411 洪水的相关文章

扯谈网络编程之Tcp SYN flood洪水攻击

简介 TCP协议要经过三次握手才能建立连接: (from wiki) 于是出现了对于握手过程进行的攻击.攻击者发送大量的FIN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries).这样的话,对于服务器的内存,带宽都有很大的消耗.攻击者如果处于公网,可以伪造IP的话,对于服务器就很难根据IP来判断攻击者,给防护带来很大的困难. 攻与防 攻击者角度 从攻击者的角度来看,有两个地方可以

[POI2007]洪水pow 题解

[POI2007]洪水pow 时间限制: 5 Sec  内存限制: 128 MB 题目描述 AKD市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD市全被水淹没了.Blue Mary,AKD市的市长,召集了他的所有顾问(包括你)参加一个紧急会议.经过细致的商议之后,会议决定,调集若干巨型抽水机,将它们放在某些被水淹的区域,而后抽干洪水.你手头有一张AKD市的地图.这张地图是边长为m*n的矩形,被划分为m*n个1*1的小正方形.对于每个小正方形,地图上已经标注了它的海拔高度以及它是否是A

Linux编程之ICMP洪水攻击

我的上一篇文章<Linux编程之PING的实现>里使用ICMP协议实现了PING的程序,ICMP除了实现这么一个PING程序,还有哪些不为人知或者好玩的用途?这里我将介绍ICMP另一个很有名的黑科技:ICMP洪水攻击. ICMP洪水攻击属于大名鼎鼎的DOS(Denial of Service)攻击的一种,一种是黑客们喜欢的攻击手段,这里本着加深自己对ICMP的理解的目的,也试着基于ICMP写一段ICMP的洪水攻击小程序. 洪水攻击(FLOOD ATTACK)指的是利用计算机网络技术向目的主机发

IP报文解析及基于IP 数据包的洪水攻击

版本(4bit) 报头长度(4bit) 优先级和服务类型(8bit) 总长度(16bit) 标识(16bit) 标志(3bit) 分段偏移(13bit) 存活期(8bit) 协议(8bit) 报头校验和(16bit) 源IP地址(32bit) 目的IP地址(32bit) 选项(0或32bit,若有的话) 数据(可变) 版本 IP版本号.报头长度 32位字的报头长度(HLEN).优先级和服务类型 服务类型描述数据报将如何被处理.前3位表示优先级位.总长度 包括报头和数据的数据包长度.标识 唯一的I

洪水 Pow

Description AKD市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD市全被水淹没了.Blue Mary,AKD市的市长,召集了他的所有顾问(包括你)参加一个紧急会议.经过细致的商议之后,会议决定,调集若干巨型抽水机,将它们放在某些被水淹的区域,而后抽干洪水. 你手头有一张AKD市的地图.这张地图是边长为m*n的矩形,被划分为m*n个1*1的小正方形.对于每个小正方形,地图上已经标注了它的海拔高度以及它是否是AKD市的一个组成部分.地图上的所有部分都被水淹没了.并且,由于这张

洪水攻击怎么办?

洪水攻击是网络攻击里比较常见的一种,一般体现就是机器慢(CPU居高不下),ssh等网络服务登陆缓慢甚至会出现登陆不上的情况,甚至在# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 的命令里,发现SYN_RECV 的数量要远远大于ESTABLISHED的数量(几乎是5~8倍以上),然后查看系统的日志或者使用#dmesg的时候,就会出现如下的语句: possible SYN flooding on port

洪水填充(Flood fill)算法

从一个起始节点开始把附近与其连通的节点提取出或填充成不同颜色颜色,直到封闭区域内的所有节点都被处理过为止,是从一个区域中提取若干个连通的点与其他相邻区域区分开(或分别染成不同颜色)的经典算法. 因为其思路类似洪水从一个区域扩散到所有能到达的区域而得名.在GNU Go和扫雷中,Flood Fill算法被用来计算需要被清除的区域. 洪水填充算法接受三个参数:起始节点,目标节点特征和针对提取对象要执行的处理. 目前有许多实现方式,基本上都显式的或隐式的使用了队列或者栈. 洪水填充算法实现最常见有四邻域

bzoj1804 [Ioi2007]Flood 洪水

Description 1964年的一场灾难性的洪水冲毁了萨格热布城.洪水袭来时许多建筑的墙被彻底冲毁.在这个题目中,给定了城市在洪水来袭前的简化模型,你的任务是确定洪水过后哪些墙没有被冲毁. 简化模型由平面上的N个点和W堵墙构成.每堵墙连接两个点,没有任何一堵墙通过其它点.模型具有如下性质: • 不存在两堵墙相交或者重合的情况,但是两堵墙可以在端点相连: • 每堵墙或者平行于坐标系的横轴,或者平行于坐标系的纵轴. 最开始,整个坐标平面都是干的.在零时刻,洪水将城市的外围淹没(城市的外围是指没有

TCP--SYN洪水攻击

在查看TCP标识位SYN时,顺便关注了一下SYN Flood,从网上查阅一些资料加以整理,SYN洪水攻击利用TCP三次握手. 1.SYN洪水介绍 当一个系统(客户端C)尝试和一个提供了服务的系统(服务器S)建立TCP连接,客户端C和服务端S会交换一系列报文. 正常的3次握手连接:首先是C发送一个SYN报文给服务端S,然后这个服务端发送一个SYN-ACK包以回应C,接着,C就返回一个ACK包来实现一次完整的TCP连接.就这样,C到服务端的连接就建立了,这时C和服务端就可以互相交换数据了. SYN洪