题目链接:

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. HTTP手记

    ---------------------tcp/ip模型和osi模型---------------------tcp/ip协议模型   osi模型应用层   应用层 表示层 会话层传输层   传输层 ...

  2. ASP.NET From表单转实体类

    原由 经常遇到 int Age=Convert.ToInt32(this.txtAge.Text); 这种蛋疼的代码,特写次方法. 之所以抛出异常是希望知道转换失败,格式错误的属性是什么,方便调试. ...

  3. 关于Java的发展前景

    各位看官觉得Java还能火几年?未来的发展方向是什么?

  4. java 可重入读写锁 ReentrantReadWriteLock 详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt206 读写锁 ReadWriteLock读写锁维护了一对相关的锁,一个用于只 ...

  5. [转]Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

     详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp84 Random即:java.util.Random, ThreadL ...

  6. hdu 3549最大流Ford-Fulkerson算法

    Ford-Fulkerson算法 戳戳http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html Ford-Fulkerson方法依 ...

  7. poj 2553 强连通

    题意:给出一个有向图,定义:若节点v所有能到达的点{wi},都能反过来到达v,那么称节点v是sink.题目要求所有的sink点. 思路:强连通缩点找出出度为零的点,输出即可. 这题主要问题是读题,了解 ...

  8. MPLS VPN随堂笔记1

    MPLS VPN 基础 1.MPLS vpn架构的特点 1.1.允许不同CE传递相同私网路由 1.2.SP内部(所有P路由器)不需要学习CE路由 1.3.无安全保障但有带宽保障(跟SP租用服务) 2. ...

  9. 201521123103 《Java学习笔记》 第八周学习总结

    一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 集合部分:TreeMap实现类:对键值进行排序. Map的entrySet Set<Map.Entry&l ...

  10. 201521123118《java程序与设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出 ...