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

    最近在进行apache性能优化设置.在修改apache配置文件之前需要备份原有的配置文件夹conf,这是网站架设的好习惯.以下的apache配置调优均是在red had的环境下进行的. httpd相关 ...

  2. YII数据库操作(CURD操作)

    数据库操作 获得模型对象 $model = 模型名::model();或$model = new 模型名(); 1.查询多条记录(返回值:二维数组) $result = $model->find ...

  3. Hazelcast

    Hazelcast是一个高度可扩展的数据分发和集群平台.特性包括: 提供java.util.{Queue, Set, List, Map}分布式实现. 提供java.util.concurrency. ...

  4. 快速预览:C# 3.0的新东西

    Lambda 表达式: Func<string, string> doubleAppend= x => x + x; Console.WriteLine (doubleAppend( ...

  5. ubuntu网络连接图标不显示

    sudo emacs /etc/NetworkManager/nm-system-settings.conf 将managed的值改为true,保存退出. sudo service network-m ...

  6. weblogic9.2重置密码

    1.删除DefaultAuthenticatorInit.ldift 2.执行命令:java -cp /home/weblogic/bea/weblogic92/server/lib/weblogic ...

  7. SDL实现按钮

    是的,按钮控件很常见,几乎在每一个Windows窗体内都能找到它的身影.SDL作为一套“一套开放源代码的跨平台多媒体开发库”,自然可以实现按钮.而按钮实现的重点,就是SDL的鼠标响应事件. SDL的鼠 ...

  8. 09.25日记(2014年9月25日23:22:06)用java这么多年面向对象我真的懂了吗,测试先行理念会玩吗

    二胡 (1)应该找些书来看看,工作N年并不代表就有N年的工作经验. (2)DiaTransit02,DiaDept02,DiaAirport02,DiaHighway02.都具有x,y属性为何不设计一 ...

  9. 尝试设计LFSR加密器,并用CAP4验证随机性

    在CPA4软件中有提供设计LFSR加密器的功能: 输入LFSR的大小,初始密钥,还有反馈密钥. 点击Set Key后点击Show LFSR 观察LFSR,发现初始密钥是1101,转成十六进制是D,反馈 ...

  10. 使用SqlBulkCopy批量插入多条数据进入表中

    由于工作中项目需求结算一次生成一批相同批次号的数据插入一个表中,然后再通过另一页面展示出来,所以需要用到一次性插入一批数据,所以就采用了SqlBulkCopy插入一批数据 1 public stati ...