题目链接:

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(——考察思维缜密性的模拟题)的更多相关文章

  1. POJ 3393 Lucky and Good Months by Gregorian Calendar 模拟题

    题目:http://poj.org/problem?id=3393 不多说了,简单模拟题,因为粗心写错了两个字母,导致错了N遍,模拟还是一贯的恶心,代码实在不想优化了,写的难看了点.. #includ ...

  2. POJ 3923 HDU 2487 Ugly Windows 简单计算

    Ugly Windows Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  3. codeforces 1443D,解法简单,思维缜密的动态规划问题

    大家好,欢迎来到codeforces专题. 今天选择的问题是1443场次的D题,这题是全场倒数第三题,截止到现在一共通过了2800余人.这题的思路不算难,但是思考过程非常有趣,这也是这一期选择它的原因 ...

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

  5. poj 2236:Wireless Network(并查集,提高题)

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 16065   Accepted: 677 ...

  6. poj 1008:Maya Calendar(模拟题,玛雅日历转换)

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64795   Accepted: 19978 D ...

  7. poj 3393 Lucky and Good Months by Gregorian Calendar(模拟)

    题目:http://poj.org/problem?id=3393一道题目挺长的模拟题,参考了网上大神的题解. #include <iostream> #include <cstdi ...

  8. POJ 2823 UESTCoj 1221 Sliding Window 单调队列 经典入门题

    题意:给出一个序列,求出每连续k个数字中最大的数和最小的数. 这是道单调队列裸题,直接写就行了. 本来用deque写出来后,发现在poj上硬是超时了,在discuss上看很多人也在抱怨超时的问题,据说 ...

  9. cygwin -- 在windows平台上运行的unix模拟环境

    cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购).它对于学 ...

随机推荐

  1. Java内存模型_顺序一致性

    数据竞争: 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量 在另一个线程读同一个变量 而且写和读没有通过同步来排序 如果程序是正确同步的,程序 ...

  2. jQuery选中下拉列表,输出值

    jQuery部分: $("#form1 select").change(function () { var s=[]; $("#form1 select :selecte ...

  3. 浅述 Java 并发

    浅述 Java 并发 volatile volatile只能保证变量对各个线程的可见性,但不能保证原子性.关于 Java语言 volatile 的使用方法就不多说了,我的建议是 除了 配合packag ...

  4. SVG坐标系统及图形变换

    前面的话 前面介绍过SVG视野后,本文将开始介绍SVG坐标系统及图形变换 坐标定位 对于所有元素,SVG使用的坐标系统或者说网格系统,和Canvas用的差不多(所有计算机绘图都差不多).这种坐标系统是 ...

  5. JAVA实用案例之文件导入导出(POI方式)

    1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...

  6. Spring中实现文件上传

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt110 实现图片上传  用户必须能够上传图片,因此需要文件上传的功能.比较常见 ...

  7. NHibernate教程(20)——二级缓存(上)

    本节内容 引入 介绍NHibernate二级缓存 NHibernate二级缓存提供程序 实现NHibernate二级缓存 结语 引入 上一篇我介绍了NHibernate内置的一级缓存即ISession ...

  8. C# XmlDocument操作XML

    XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Lang ...

  9. 解决 SQL 注入的另类方法

    本文是翻译,版权归原作者所有 原文地址(original source):https://bitcoinrevolt.wordpress.com/2016/03/08/solving-the-prob ...

  10. 学号:201521123116 《java程序设计》第八周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 List<Entry<String,Integer> ...