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收购).它对于学 ...
随机推荐
- HTTP手记
---------------------tcp/ip模型和osi模型---------------------tcp/ip协议模型 osi模型应用层 应用层 表示层 会话层传输层 传输层 ...
- ASP.NET From表单转实体类
原由 经常遇到 int Age=Convert.ToInt32(this.txtAge.Text); 这种蛋疼的代码,特写次方法. 之所以抛出异常是希望知道转换失败,格式错误的属性是什么,方便调试. ...
- 关于Java的发展前景
各位看官觉得Java还能火几年?未来的发展方向是什么?
- java 可重入读写锁 ReentrantReadWriteLock 详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt206 读写锁 ReadWriteLock读写锁维护了一对相关的锁,一个用于只 ...
- [转]Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp84 Random即:java.util.Random, ThreadL ...
- hdu 3549最大流Ford-Fulkerson算法
Ford-Fulkerson算法 戳戳http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html Ford-Fulkerson方法依 ...
- poj 2553 强连通
题意:给出一个有向图,定义:若节点v所有能到达的点{wi},都能反过来到达v,那么称节点v是sink.题目要求所有的sink点. 思路:强连通缩点找出出度为零的点,输出即可. 这题主要问题是读题,了解 ...
- MPLS VPN随堂笔记1
MPLS VPN 基础 1.MPLS vpn架构的特点 1.1.允许不同CE传递相同私网路由 1.2.SP内部(所有P路由器)不需要学习CE路由 1.3.无安全保障但有带宽保障(跟SP租用服务) 2. ...
- 201521123103 《Java学习笔记》 第八周学习总结
一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 集合部分:TreeMap实现类:对键值进行排序. Map的entrySet Set<Map.Entry&l ...
- 201521123118《java程序与设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出 ...