Description

Sheryl works for a software company in the country of Brada. Her job is to develop a Windows operating system. People in Brada are incredibly conservative. They even never use graphical monitors! So Sheryl’s operating system has to run in text mode and windows in that system are formed by characters. Sheryl decides that every window has an ID which is a capital English letter (‘A’ to ‘Z’). Because every window had a unique ID, there can’t be more than 26 windows at the same time. And as you know, all windows are rectangular. 
On the screen of that ugly Windows system, a window’s frame is formed by its ID letters. Fig-1 shows that there is only one window on the screen, and that window’s ID is ‘A’. Windows may overlap. Fig-2 shows the situation that window B is on the top of window A. And Fig-3 gives a more complicated overlapping. Of course, if some parts of a window are covered by other windows, you can’t see those parts on the screen. 
.........................  ....AAAAAAAAAAAAA........  ....A...........A........  ....A...........A........  ....A...........A........  ....AAAAAAAAAAAAA........  ......................... 
Fig-1 
.........................  ....AAAAAAAAAAAAA........  ....A...........A........  ....A.......BBBBBBBBBB...  ....A.......B........B...  ....AAAAAAAAB........B...  ............BBBBBBBBBB...  ......................... 
Fig-2

..........................  ....AAAAAAAAAAAAA.........  ....A...........A.........  ....A.......BBBBBBBBBB....  ....A.......B........BCCC.  ....AAAAAAAAB........B..C.  .......C....BBBBBBBBBB..C.  .......CCCCCCCCCCCCCCCCCC.  .......................... 
Fig-3 
If a window has no parts covered by other windows, we call it a “top window” (The frame is also considered as a part of a window). Usually, the top windows are the windows that interact with user most frequently. Assigning top windows more CPU time and higher priority will result in better user experiences. Given the screen presented as Figs above, can you tell Sheryl which windows are top windows? 

 

Input

The input contains several test cases. 
Each test case begins with two integers, n and m (1 <= n, m <= 100), indicating that the screen has n lines, and each line consists of m characters. 
The following n lines describe the whole screen you see. Each line contains m characters. For characters which are not on any window frame, we just replace them with ‘.’ . 
The input ends with a line of two zeros. 
It is guaranteed that: 
1) There is at least one window on the screen.  2) Any window’s frame is at least 3 characters wide and 3 characters high.  3) No part of any window is outside the screen. 
 

Output

For each test case, output the IDs of all top windows in a line without blanks and in alphabet order. 

题目大意:给一个n*m的矩阵,每一个字母代表一个窗口的边框,问那些窗口在最顶端(这题太难描述了不管了……)

思路:这题数据范围很小,就不用那些很难写但速度可能比较快的算法了,因为是水题写得快和准更重要。首先枚举每一个字母,找出每一个字母最大和最小的x、y坐标,检查一下这个字母的窗口边框是不是都是那个字母,再检查一下这个窗口里面有没有被其他奇怪的东西覆盖(就是都要是'.'),就能AC了。

PS:把一个max_y打成了max_x又WA了一个>_<

代码(0MS):

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; const int MAX = ; char mat[MAX][MAX];
int n, m; bool top(char c) {
int max_x = , min_x = MAX, max_y = , min_y = MAX;
for(int i = ; i <= n; ++i) {
for(int j = ; j <= m; ++j) {
if(mat[i][j] != c) continue;
max_x = max(max_x, j);
min_x = min(min_x, j);
max_y = max(max_y, i);
min_y = min(min_y, i);
}
}
if(max_x - min_x < || max_y - min_y < ) return false;
for(int i = min_y; i <= max_y; ++i)
if(mat[i][max_x] != c || mat[i][min_x] != c) return false;
for(int i = min_x; i <= max_x; ++i)
if(mat[max_y][i] != c || mat[min_y][i] != c) return false;
for(int i = min_y + ; i < max_y; ++i) {
for(int j = min_x + ; j < max_x; ++j)
if(mat[i][j] != '.') return false;
}
return true;
} int main() {
while(scanf("%d%d", &n, &m) != EOF) {
if(n == && m == ) break;
for(int i = ; i <= n; ++i) scanf("%s", &mat[i][]);
for(char c = 'A'; c <= 'Z'; ++c)
if(top(c)) printf("%c", c);
puts("");
}
}

HDU 2487 Ugly Windows(暴力)(2008 Asia Regional Beijing)的更多相关文章

  1. POJ 3923 HDU 2487 Ugly Windows 简单计算

    Ugly Windows Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  2. HDU 2489 Minimal Ratio Tree(暴力+最小生成树)(2008 Asia Regional Beijing)

    Description For a tree, which nodes and edges are all weighted, the ratio of it is calculated accord ...

  3. HDU 2494/POJ 3930 Elevator(模拟)(2008 Asia Regional Beijing)

    Description Too worrying about the house price bubble, poor Mike sold his house and rent an apartmen ...

  4. HDU 2487 Ugly Windows

    递归求解,代码不太好看,是2013年7月写的 代码: #include<stdio.h> #include<iostream> #include<string.h> ...

  5. HDU 2490 Parade(DPの单调队列)(2008 Asia Regional Beijing)

    Description Panagola, The Lord of city F likes to parade very much. He always inspects his city in h ...

  6. HDU 2492 Ping pong(数学+树状数组)(2008 Asia Regional Beijing)

    Description N(3<=N<=20000) ping pong players live along a west-east street(consider the street ...

  7. HDU 2491 Priest John's Busiest Day(贪心)(2008 Asia Regional Beijing)

    Description John is the only priest in his town. October 26th is the John's busiest day in a year be ...

  8. (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)    Memo ...

  9. (二叉树)Elven Postman -- HDU -- 54444(2015 ACM/ICPC Asia Regional Changchun Online)

    http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others)  ...

随机推荐

  1. php与java

    作者:eechen链接:https://www.zhihu.com/question/20377398/answer/141328982来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  2. MySQL---存储过程 及 条件语句、循环语句

    存储过程 存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行. 1.创建存储过程 -- 创建存储过程 delimiter // create procedure ...

  3. php5.4以上 mysqli 实例操作mysql 增,删,改,查

    <?php //php5.4以上 mysqli 实例操作mysql header("Content-type:text/html;charset=utf8"); $conn ...

  4. A64 I2S调试

    通过A64 的I2S总线与回音消除模块连接,在A64中需要使能并配置daudio功能. Daudio 为A64 的数字音频接口,可配置成i2s/pcm格式标准音频接口. 内核配置在lichee/lin ...

  5. centos7下使用n grok编译服务端和客户端穿透内网

    (发现博客园会屏蔽一些标题中的关键词,比如ngrok.内网穿透,原因不知,所以改了标题才能正常访问,) 有时候想在自己电脑.路由器或者树莓派上搭建一些web.vpn等服务让自己用,但是自己的电脑一般没 ...

  6. Zabbix 3.4.11监控 apache服务,ftp服务的配置

    一 zabbix 的安装部署 略 二监控 apache服务的配置 首先在本机下载模板:https://github.com/rdvn/zabbix-templates/archive/m aster. ...

  7. HTTPS相关知识以及在golang中的应用

    最近简单学习了HTTPS,并在golang中实践了一下,现在把学到的知识记录下来,方便以后查看,如果有幸能帮到有需要的人就更好了,如果有错误欢迎留言指出. 一些简单的概念,可以自行百度百科 HTTPS ...

  8. 日期插件Mobiscroll

    http://mobiscroll.com/ http://www.cnblogs.com/hxling/archive/2012/12/12/2814207.html http://www.wglo ...

  9. 武汉Uber优步司机奖励政策(12月14日到12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. ubuntu16安装过程中的硬盘分区

    硬盘分区主要是三个区,如下图,分别是/,swap交换空间,/home,其中第一个分区/是主分区,建议至少8GB,要不ubuntu安装的时候放不下.