HDU 2487 Ugly window

这是切的很痛苦的一道题,自己测试了很多样例却终究不过,中间也做了诸多修改,后来无奈去网上看题解,发现遗漏了一种情况,就是两个窗口可能边框都能看见,但是一个嵌套在另一里面,而我判定是不是 “top window”的条件只要是边框全部暴露在外面,所以呢发现边框完整没有遮挡的时候,对边框包围区域遍历一遍看里面有没有字母,这样就能判定一个“top window”了。
主要思路就是沿着右下左上的方向行进,遇到不是相同字母或越界的情况就变化方向,如果提前表示方向的d>3,说明边框被遮挡不完整,若完整的话对框内区域进行查找看有没有其他字母。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 110 char maze[N][N];
5 int vis[N][N];
int ans[];
int dx[]= {,,,-};
int dy[]= {,,-,};
int n,m,d; int find(int x,int y,int s,int t)
{
int i,j;
for(i=x+;i<s;i++)
for(j=y+;j<t;j++)
if(isalpha(maze[i][j]))
return ;
return ;
} void dfs(int x,int y,int c)
{
int nx,ny;
nx=x+dx[d];
ny=y+dy[d];
int s=x,t=y,p,q;
while()
{
if(nx==s&&ny==t&&d==&&maze[nx][ny]==c&&vis[nx][ny]&&fa[nx][ny]==nx*m+ny)
{
if(!find(s,t,p,q))
ans[c-'A']=;
else ans[c-'A']=-;
return;
}
while(nx<||nx>=n||ny<||ny>=m||maze[nx][ny]!=c||vis[nx][ny])
{
d++;
if(d>)
{
ans[c-'A']=-;
return;
}
if(d==)
p=x,q=y;
nx=x+dx[d];
ny=y+dy[d];
} vis[x][y]=;
x=nx;
y=ny;
if(nx==s&&ny==t&&d==&&maze[nx][ny]==c&&vis[nx][ny]&&fa[nx][ny]==nx*m+ny)
{
ans[c-'A']=;
return;
}
nx=x+dx[d];
ny=y+dy[d];
}
} int main(void)
{
int i,j,c;
while(scanf("%d%d",&n,&m)&&(n||m))
{
memset(fa,-,sizeof(fa));
memset(ans,,sizeof(ans));
memset(maze,,sizeof(maze));
memset(vis,,sizeof(vis));
for(i=; i<n; i++)
scanf("%s",maze[i]);
for(i=; i<n; i++)
for(j=; j<m; j++)
{
c=maze[i][j];
if(c>='A'&&c<='Z'&&!ans[c-'A'])
{
fa[i][j]=i*m+j;
d=;
dfs(i,j,c);
}
}
for(i=; i<; i++)
if(ans[i]==)
putchar(i+'A');
puts("");
}
return ;
}
HDU 2487 Ugly window的更多相关文章
- POJ 3923 HDU 2487 Ugly Windows 简单计算
Ugly Windows Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- HDU 2487 Ugly Windows(暴力)(2008 Asia Regional Beijing)
Description Sheryl works for a software company in the country of Brada. Her job is to develop a Win ...
- HDU 2487 Ugly Windows
递归求解,代码不太好看,是2013年7月写的 代码: #include<stdio.h> #include<iostream> #include<string.h> ...
- Ugly Window 【acm题】
话说好久没有碰acm题目了.............................. 看到Ugly Window这道题目,没有多想,就直接先找到字母的连续长度和连续高度,并统计该字母的总个数,然后用 ...
- HDU 5920 Ugly Problem 【模拟】 (2016中国大学生程序设计竞赛(长春))
Ugly Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- HDU - 5920 Ugly Problem 求解第一个小于n的回文数
http://acm.hdu.edu.cn/showproblem.php?pid=5920 http://www.cnblogs.com/xudong-bupt/p/4015226.html 把前半 ...
- HDU 5920 Ugly Problem
说起这道题, 真是一把辛酸泪. 题意 将一个正整数 \(n(\le 10^{1000})\) 分解成不超过50个回文数的和. 做法 构造. 队友UHC提出的一种构造方法, 写起来比较方便一些, 而且比 ...
- HDU 5920 Ugly Problem 高精度减法大模拟 ---2016CCPC长春区域现场赛
题目链接 题意:给定一个很大的数,把他们分为数个回文数的和,分的个数不超过50个,输出个数并输出每个数,special judge. 题解:现场赛的时候很快想出来了思路,把这个数从中间分为两部分,当位 ...
- 【HDOJ】2487 Ugly Windows
暴力解. #include <cstdio> #include <cstring> #define MAXN 105 char map[MAXN][MAXN]; ]; int ...
随机推荐
- jqery选择器
根据可见性 属性 匹配元素 <!doctype html> <html lang="en"> <head> <meta charset=& ...
- C++Primer笔记二
真是一本好书,就这么点,就感觉学到很多了,当然也是我水平太差. 用shell或者bash的时候有一个文件重定向,就是每次程序运行的时候,我们都需要手动输入内容,然后程序输出内容,这时可以用文件来代替. ...
- WORDPRESS 后台500错误解决方法集合
引自: http://www.guuglc.com/565.html 这篇文章本质上我是不可能会写到,就因为7号那天晚上,我准备搬家的时候,发现前台完好,进入后台却500错误. 这时我就得急的,毕竟明 ...
- Jquery为下拉列表动态赋值与取值,取索引
接触前端也不久对jquery用的也只是皮毛,写过去感觉能复用的发出来,大家指点下 1.下拉列表动态赋值 function initddlYear() { var mydate = new Date() ...
- O-C相关-07-@property关键字简介与使用
基本概念:在O-C中,创建完类之后还需要给一个类添加属性和方法,之前说过的set和get方法比较繁琐,因此引入了@property 这个编译器指令.@property 是一个编译器指令.所谓的编译器指 ...
- [002] The Perks of Being a Wallflower - 读后记
The Perks of Being a Wallflower 今天(2015年10月30日 18:26:17)读完"The Perks of Being a Wallflower" ...
- 快速排序 javascript实现
Quicksort(快速排序) 是由 东尼·霍尔 所发展的一种排序. 它比其他的Ο(n log n)算法更快, 因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来.当然, ...
- thinkphp 整合 ucenter
http://xcodebox.com/2013/06/8855.html 参考 1 ucenter源码目录下 /advanced/examples/api目录 copy到thinkphp项目根目 ...
- 两个for循环例子
var i,j; var a=0; // for(i=0,j=0;i<5,j<7;i++,j++){ // a=i+j; // } // alert(a) //12 for(i=0,j=0 ...
- ajax GET和POST请求web api 的几种方式
GET请求 1.无参数get请求 一般get请求有两种写法,一种是 $.get() 一种是$.ajax({type:"get"}), 我个人比较喜欢用后者. 下面例子主要是ge ...