7.14_D题

D. BLOCKS

时间限制 1000 ms 内存限制 65536
KB

题目描述

给定一个N?M的矩阵,求问里面有多少个由‘#‘组成的矩形,"There
are 5 ships.",若是里面有一个不是矩形的联通块,则输出"So Sad"

输入格式

1≤n,m≤1000

有多组数据,EOF结束。

输出格式

每行对应一个answer

输入样例

6 8
.....#.#
##.....#
##.....#
.......#
#......#
#..#...#
6 8
.....#.#
##.....#
###...##
.......#
##.....#
#..#...#

输出样例

There are 5 ships.
So Sad

题目链接:http://code.bupt.edu.cn/problem/p/407/

寻找是否存在不合法的矩形,如果没有,输出矩形个数,

我比较笨的方法就是,用一个结构体存储矩形的左上点和右下点的坐标,遍历一边矩阵,遇到“#”便开始处理,记录下此时点的坐标(x,y)为矩形的起始点,然后在这一行中,向后寻找“#”,如果遇到“.”就停止,并记录此时的y值(y1),作为结束点的坐标,然后从坐标(x+1,y)开始处理如果在y到y1之间既存在“#”,又存在“.”,则说明这个矩阵不合法,否则继续扫描,直到下一行全是“.”。接下来,在判断每一行的起始点纵坐标之前一行和结束点纵坐标后一行是否有“#”,如果有,也是非法输入。每次处理一个“#”都要将它设置成“.”,防止下次继续扫到这个点。

一种比较有技巧的方法是这样的:如果这个矩形是非法的,那一定存在这样的 这四种情况中的一种,如果存在,则是非法,如果不存在,则数其中矩形的个数,而数数也是有技巧,只要存在这样的结构,,那就一定存在一个矩形,只需要统计矩形的个数即可。

学长们讲的方法是这样的:也是利用结构体存储结构体信息,然后记录每一个联通块的最大长度和最大宽度,如果联通块的面积等于最大长度*最大宽度,那么存在一个矩形,否则不存在,跳出。也是比较简单。

第一种方法的AC代码:

7.14_D题,布布扣,bubuko.com

时间: 2024-08-24 10:56:04

7.14_D题的相关文章

C#认证第一章1 题 11题

C#第一章第一题 C#认证第一章  11题

[poj2104]可持久化线段树入门题(主席树)

解题关键:离线求区间第k小,主席树的经典裸题: 对主席树的理解:主席树维护的是一段序列中某个数字出现的次数,所以需要预先离散化,最好使用vector的erase和unique函数,很方便:如果求整段序列的第k小,我们会想到离散化二分和线段树的做法, 而主席树只是保存了序列的前缀和,排序之后,对序列的前缀分别做线段树,具有差分的性质,因此可以求任意区间的第k小,如果主席树维护索引,只需要求出某个数字在主席树中的位置,即为sort之后v中的索引:若要求第k大,建树时反向排序即可 1 #include

旧题新做:从idy的视角看数据结构

“今天你不写总结……!!!” 额…… 还是讲我的吧.这些考试都是idy出的题. 20170121:DFS序. ST表.线段树练习 这是第一次考数据结构. Problem 1. setsum 1 second 给你一个长度为N 的整数序列,支持两种操作: • modity l r val 将区间[l,r] 中的所有数修改为val • query l r 询问区间[l,r] 所有数的和 分析:最简单的线段树,区间更改区间求和.但注意是更改,不是添改,sum与flag需同时覆盖. Problem 2.

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,

hdu 2966 In case of failure kdtree模板题

问求每个点距离平方的最小的点 kd-tree模板题…… 1 #include<bits/stdc++.h> 2 #define cl(a,b) memset(a,b,sizeof(a)) 3 #define debug(x) cerr<<#x<<"=="<<(x)<<endl 4 using namespace std; 5 typedef long long ll; 6 typedef pair<int,int>

2017 计蒜之道 初赛 第一场 A、B题

A题 阿里的新游戏 题目概述: 阿里九游开放平台近日上架了一款新的益智类游戏--成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子.我们可以用坐标系来描述棋盘: 如果一条线段上的三个交叉点都被同一玩家的棋子占据的话,则称这条线段被该玩家 成三.现在,小红和小明两人在游戏平台上下棋,其中小红的棋子是黑色的.请你帮小红计算他成三的线段数. 样例对应的棋盘如下: 输入格式 输入第一行两个整数 n,m(3 \le n, m \le

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

POJ 1741 Tree(树的点分治,入门题)

Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21357   Accepted: 7006 Description Give a tree with n vertices,each edge has a length(positive integer less than 1001).Define dist(u,v)=The min distance between node u and v.Give an in

九度OJ刷题——1013:开门人和关门人

题目描述:     每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签到.签离记录,请根据记录找出当天开门和关门的人. 输入: 测试输入的第一行给出记录的总天数N ( N> 0 ),下面列出了N天的记录.     每天的记录在第一行给出记录的条目数M (M > 0 ),下面是M行,每行的格式为 证件号码 签到时间 签离时间 其中时间按"小时:分钟:秒钟"(各占2位)给出,证件号码是长度不超过15的字符串. 输出: 对每一天的记录输出1行,即当天