POJ 3923 Ugly Windows(——考察思维缜密性的模拟题)
题目链接:
http://poj.org/problem?id=3923
题意描述:
输入一个n*m的屏幕
该屏幕内有至少一个对话框(每个对话框都有对应的字母表示)
判断并输出该屏幕内处于最表层的对话框是哪些(有多个的话按字典序)
解题思路:
很接近生活的一道模拟题,考察了思维的缜密性,尤其是出现嵌套情况时,应该输出里层的对话框编号即可。
AC代码:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char map[][];
int istop(int sx,int sy,char x); //判断是否为表层对话框函数
int main()
{
int n,m,i,j,list[],k,c;
while(scanf("%d%d",&n,&m),n+m != )
{
memset(list,,sizeof(list));
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
scanf(" %c",&map[i][j]);
if(isalpha(map[i][j]))
list[map[i][j]-'A']=;//标记有哪些字母标号的对话框出现
}
}
for(i=;i<;i++)
{
if(list[i])
{
for(j=;j<=n;j++)
{
int flag=;
for(k=;k<=m;k++)
{
if(map[j][k]-'A'==i)
{
list[i]=istop(j,k,map[j][k]);
flag=;
break;
}
}
if(flag)
break;
}
}
}
for(i=;i<;i++)
{
if(list[i])
printf("%c",'A'+i);
}
printf("\n");
}
return ;
}
int istop(int sx,int sy,char x)
{
int i,j,r,c;
i=sx;
j=sy+;
while(map[i][j] == x)
j++;
j--;
c=j;//记录该对话框的列数
if(map[i+][j] != x)
return ; while(map[i][j] == x)
i++;
i--;
r=i;//记录该对话框的行数
if(map[i][j-]!=x)
return ; while(map[i][j] == x)
j--;
j++;
if(map[i-][j]!=x)
return ; while(map[i][j] == x)
i--;
i++;
if(i!=sx &&j!=sy)
return ; for(i=sx+;i<r;i++)//判断该对话框内是否有嵌套对话框
for(j=sy+;j<c;j++)
if(map[i][j]!='.')
return ; return ;
}
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char map[][];
int istop(int sx,int sy,char x);
int main()
{
int n,m,i,j,list[],k,c;
while(scanf("%d%d",&n,&m),n+m != )
{
memset(list,,sizeof(list));
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
scanf(" %c",&map[i][j]);
if(isalpha(map[i][j]))
list[map[i][j]-'A']=;
}
}
for(i=;i<;i++)
{
if(list[i])
{
for(j=;j<=n;j++)
{
int flag=;
for(k=;k<=m;k++)
{
if(map[j][k]-'A'==i)
{
list[i]=istop(j,k,map[j][k]);
flag=;
break;
}
}
if(flag)
break;
}
}
}
for(i=;i<;i++)
{
if(list[i])
printf("%c",'A'+i);
}
printf("\n");
}
return ;
}
int istop(int sx,int sy,char x)
{
int i,j,r,c;
i=sx;
j=sy+;
while(map[i][j] == x)
j++;
j--;
c=j;
if(map[i+][j] != x)
return ; while(map[i][j] == x)
i++;
i--;
r=i;
if(map[i][j-]!=x)
return ; while(map[i][j] == x)
j--;
j++;
if(map[i-][j]!=x)
return ; while(map[i][j] == x)
i--;
i++;
if(i!=sx &&j!=sy)
return ; for(i=sx+;i<r;i++)
for(j=sy+;j<c;j++)
if(map[i][j]!='.')
return ;
POJ 3923 Ugly Windows(——考察思维缜密性的模拟题)的更多相关文章
- POJ 3393 Lucky and Good Months by Gregorian Calendar 模拟题
题目:http://poj.org/problem?id=3393 不多说了,简单模拟题,因为粗心写错了两个字母,导致错了N遍,模拟还是一贯的恶心,代码实在不想优化了,写的难看了点.. #includ ...
- POJ 3923 HDU 2487 Ugly Windows 简单计算
Ugly Windows Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- codeforces 1443D,解法简单,思维缜密的动态规划问题
大家好,欢迎来到codeforces专题. 今天选择的问题是1443场次的D题,这题是全场倒数第三题,截止到现在一共通过了2800余人.这题的思路不算难,但是思考过程非常有趣,这也是这一期选择它的原因 ...
- 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 ...
- poj 2236:Wireless Network(并查集,提高题)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 16065 Accepted: 677 ...
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- poj 3393 Lucky and Good Months by Gregorian Calendar(模拟)
题目:http://poj.org/problem?id=3393一道题目挺长的模拟题,参考了网上大神的题解. #include <iostream> #include <cstdi ...
- POJ 2823 UESTCoj 1221 Sliding Window 单调队列 经典入门题
题意:给出一个序列,求出每连续k个数字中最大的数和最小的数. 这是道单调队列裸题,直接写就行了. 本来用deque写出来后,发现在poj上硬是超时了,在discuss上看很多人也在抱怨超时的问题,据说 ...
- cygwin -- 在windows平台上运行的unix模拟环境
cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购).它对于学 ...
随机推荐
- 函数作用域中的this问题
首先一起回顾下预解析和作用域吧: 预解析: 浏览器每读到一个script标签或function,先不执行任何代码,会先把整个代码快速的浏览一遍,然后从中 挑出 var 和 function两个关键字 ...
- spring mvc:属性无法自动注入
在使用spring mvc 3开发一个项目模块时,遇到这样一个奇怪的问题: 前端页面发送的请求中,所有参数都无法自动注入到指定的@ModelAttribute对象中,经过检查,参数名称与接受对象的属性 ...
- ActiveMQ持久化消息的三种方式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt362 本文只介绍三种方式,分别是持久化为文件,MYSql,Oracle.下面 ...
- SGI STL内存配置器存在内存泄漏吗?
阅读了SGI的源码后对STL很是膜拜,很高质量的源码,从中学到了很多.温故而知新!下文中所有STL如无特殊说明均指SGI版本实现. STL 内存配置器 STL对内存管理最核心部分我觉得是其将C++对象 ...
- 获取windows任务栏高度的方法
方法一: TRect rt; SystemParametersInfo(SPI_GETWORKAREA, , &rt, ); //任务栏在下面的高度 int y = ::GetSystemMe ...
- MySQL(四)--蠕虫复制、查询
1 蠕虫复制 蠕虫复制:从已有的数据中去获取数据,然后将数据又进行新增操作,数据成倍增加. 表创建高级操作:从已有创建新表(复制表结构) create table 表名 like 数据库.表名; 蠕虫 ...
- 201521123051《Java程序设计》第六周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123063 JAVA程序设计 第二周学习总结
1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...
- 201521123106《java程序设计》第二周学习总结
1. 本周学习总结 学习了java的基础语法.在java中使用浮点型会不精确,改用double行就好.学习了string的类型,string的对象是不可变的,创建之后不能再修改,在string的拼接中 ...
- Python IDLE快捷键一览
编辑状态时:Ctrl + [ .Ctrl + ] 缩进代码Alt+3 Alt+4 注释.取消注释代码行Alt+5 Alt+6 切换缩进方式 空格<=>TabAlt+/ 单词完成,只要文中出 ...