这是切的很痛苦的一道题,自己测试了很多样例却终究不过,中间也做了诸多修改,后来无奈去网上看题解,发现遗漏了一种情况,就是两个窗口可能边框都能看见,但是一个嵌套在另一里面,而我判定是不是 “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的更多相关文章

  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 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 ...

  3. HDU 2487 Ugly Windows

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

  4. Ugly Window 【acm题】

    话说好久没有碰acm题目了.............................. 看到Ugly Window这道题目,没有多想,就直接先找到字母的连续长度和连续高度,并统计该字母的总个数,然后用 ...

  5. HDU 5920 Ugly Problem 【模拟】 (2016中国大学生程序设计竞赛(长春))

    Ugly Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  6. HDU - 5920 Ugly Problem 求解第一个小于n的回文数

    http://acm.hdu.edu.cn/showproblem.php?pid=5920 http://www.cnblogs.com/xudong-bupt/p/4015226.html 把前半 ...

  7. HDU 5920 Ugly Problem

    说起这道题, 真是一把辛酸泪. 题意 将一个正整数 \(n(\le 10^{1000})\) 分解成不超过50个回文数的和. 做法 构造. 队友UHC提出的一种构造方法, 写起来比较方便一些, 而且比 ...

  8. HDU 5920 Ugly Problem 高精度减法大模拟 ---2016CCPC长春区域现场赛

    题目链接 题意:给定一个很大的数,把他们分为数个回文数的和,分的个数不超过50个,输出个数并输出每个数,special judge. 题解:现场赛的时候很快想出来了思路,把这个数从中间分为两部分,当位 ...

  9. 【HDOJ】2487 Ugly Windows

    暴力解. #include <cstdio> #include <cstring> #define MAXN 105 char map[MAXN][MAXN]; ]; int ...

随机推荐

  1. Hibernate事务管理

    User类: public class User implements Serializable{ public User(){} private Integer id; private String ...

  2. Scala函数字面量

    Scala中函数为头等公民,你不仅可以定义一个函数然后调用它,而且你可以写一个未命名的函数字面量,然后可以把它当成一个值传递到其它函数或是赋值给其它变量.下面的例子为一个简单的函数字面量(参考整数字面 ...

  3. 一个不错的flash 模板

    听到好听的背景音乐,而且效果也挺不错的,忽然感觉flash好强大呀 1.模板浏览地址:http://www.cssmoban.com/cssthemes/5229.shtml 2.模板演示地址:htt ...

  4. OC - 4.OC核心语法

    一.点语法 1> 基本使用 点语法本质上是set方法/get方法的调用 2> 使用注意 若出现在赋值操作符的右边,在执行时会转换成get方法 若出现在赋值操作符的左边,在执行时会转换成se ...

  5. jquery 文本框失去焦点显示提示信息&&单击置空文本框

    1.<textarea rows="4" placeholder="请输入提醒内容"></textarea> 2. /** * @par ...

  6. Cogs 1008. 贪婪大陆(树状数组)

    贪婪大陆 难度等级 ★★ 时间限制 1000 ms (1 s) 内存限制 128 MB 测试数据 10 简单对比 输入文件:greedisland.in 输出文件:greedisland.out 简单 ...

  7. ASP.NET前端语法应用

    字符拼接 <%# "abc" + Eval("列名").ToString() %> <%# Eval("列名"," ...

  8. IIS原理学习

    IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ...

  9. 由json生成php配置文件

    $str = '<?php return ' . var_export(json_decode($json, true), true) . ';';file_put_contents('./co ...

  10. xml转array

    1.字串 $xml = simplexml_load_string($data);$array = json_decode(json_encode($xml),TRUE); 2.文件$xml = si ...