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. Qt5连接Mysql环境配置

    已安装的环境:Mysql5.7 64bit ,Qt5.12 64bit. 到mysql官方下载mysql5.7 64bit的压缩包,解压,复制下图框内四个文件. 将四个文件复制到Qt安装目录下bin目 ...

  2. Maven安装配置环境变量及eclipse的配置

    Maven安装与配置   一.需要准备的东西 1. JDK 2. Eclipse 3. Maven程序包 二.下载与安装 1. 前往https://maven.apache.org/download. ...

  3. memcache类的扩展函数

    Memcache — Memcache类 /****连接****/1.Memcache::connect – 创建一个Memcache对象语法:bool Memcache::connect ( str ...

  4. flask的查询,一对多,多对多

    模型的关联: 一对多 class Role(db.Model): us = db.relationship('User',backref='role',lazy='dynamic') class Us ...

  5. 《HTML与CSS知识》系列分享专栏

    收藏HTML和CSS方面的技术文章,作为一个WEB开发者,必须要知道HTML和CSS方面的知识,即使作为后台开发者也应该知道一些常用的HTML和CSS知识,甚至架构师也要了解,这样才会开发出实用的网站 ...

  6. HyperLedger Fabric 1.4 基础环境搭建(7)

    学习了前面几章理论知识后,本章开始介绍实践操作,先介绍Fabric基础环境搭建,采用的操作系统为Centos 7 64位,依次介绍Docker安装.Docker-Compose安装.GO语言环境安装. ...

  7. shiro中基于注解实现的权限认证过程

    授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限. 如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限等等. 一.用户权限模型 为实现一个较为灵活的用户权限数据模 ...

  8. 【caffe范例详解】 - 1.Classification分类

    1. 安装 首先,导入numpy和matplotlib库 # numpy是常用的科学计算库,matplot是常用的绘图库 import numpy as np import matplotlib.py ...

  9. LeetCode: 63. Unique Paths II(Medium)

    1. 原题链接 https://leetcode.com/problems/unique-paths-ii/description/

  10. 封装一个CSVHelper

    public class CSVHelper { /// <summary> /// CSV转换成DataTable(OleDb数据库访问方式) /// </summary> ...