UVA1103
题意:输入以16进制的矩阵,先转换成2进制,之后输出形成的图案。
思路:先处理掉无关图案的0,之后一个图案一个图案的遍历,识别图案的方法就是有多少个圈圈。找到一个就全部标记为-1。并且记录圆圈的数目。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm> using namespace std; int gragh[][];
int dir[][] = {{-,},{,},{,},{,-}};
char s[];
int n,m,ans; void change(char c,int i,int j)
{
if(c >= '' && c <= ''){
int a = c - '';
gragh[i][(j-)*+] = a%;a /= ;
gragh[i][(j-)*+] = a%;a /= ;
gragh[i][(j-)*+] = a%;a /= ;
gragh[i][(j-)*+] = a%;
}
else {
int a = c - 'a' + ;
gragh[i][(j-)*+] = a%;a /= ;
gragh[i][(j-)*+] = a%;a /= ;
gragh[i][(j-)*+] = a%;a /= ;
gragh[i][(j-)*+] = a%;
}
} void dfs1(int x,int y)
{
gragh[x][y] = -;
for(int i = ;i < ; i++){
int xx = x + dir[i][];
int yy = y + dir[i][];
if(xx >= && xx <= n && yy >= && yy <= m && gragh[xx][yy] == ){
dfs1(xx,yy);
}
}
} void dfs2(int x,int y)
{
gragh[x][y] = -;
for(int i = ;i < ; i++){
int xx = x + dir[i][];
int yy = y + dir[i][];
if(xx >= && xx <= n && yy >= && yy <= m && gragh[xx][yy] == ){
dfs1(xx,yy);
ans++;
}
else if(xx >= && xx <= n && yy >= && yy <= m && gragh[xx][yy] == ){
dfs2(xx,yy);
}
}
} int main()
{
// freopen("in.txt","r",stdin);
int ncase = ;
while(scanf("%d%d",&n,&m) != EOF){
if(n == && m == )
break; memset(gragh,,sizeof(gragh));
memset(s,,sizeof(s));
char c[];
for(int i = ;i <= n; i++){
scanf("%s",c+);
for(int j = m;j >= ; j--){
change(c[j],i,j);
}
}
m *=; for(int i = ;i <= n; i++){
if(gragh[i][] == )
dfs1(i,);
if(gragh[i][m] == )
dfs1(i,m);
}
for(int j = ;j <= m; j++){
if(gragh[][j] == )
dfs1(,j);
if(gragh[n][j] == )
dfs1(n,j);
}
int pos = ;
for(int i = ;i <= n; i++){
for(int j = ;j <= m; j++){
if(gragh[i][j] == ){
ans = ;
dfs2(i,j);
if(ans == ){
s[pos++] = 'A';
}
else if(ans == )
s[pos++] = 'J';
else if(ans == )
s[pos++] = 'D';
else if(ans == )
s[pos++] = 'S';
else if(ans == )
s[pos++] = 'W';
else if(ans == )
s[pos++] = 'K';
}
}
} sort(s,s+pos);
printf("Case %d: ",ncase++);
for(int i = ;i < pos; i++)
printf("%c",s[i]);
printf("\n");
}
return ;
}
UVA1103的更多相关文章
- UVA1103 古代象形符号 Ancient Messages 题解
题目链接: https://www.luogu.org/problemnew/show/UVA1103 题目分析: 我们可以先进行矩阵的还原 for(int k=1;k<=4;k++) { a[ ...
- Uva1103 Ancient Messages
题意:识别图中的象形文字.但是,图形可以任意的拉伸,但不能拉断. 分析:这种题如果图形没有特征是不可做类型的题,不过观察图形可以发现每个图形中的洞的数量是一定的,我们只需要数出每一个封闭图形的洞数就能 ...
- 6_13古代象形符号(UVa1103)<图的连通块的应用>
给出一幅黑白图像,每行相邻的四个点压缩成一个十六进制的字符.然后还有题中图示的6中古老的字符,按字母表顺序输出这些字符的标号. 输出说明:For each test case, display its ...
- 这个随笔用用来放一些好的思想和思考方式(暂时secret)
一: 给你一个只有4和7的数字,求这是第几个幸运数字? 思路: 我们把4映射成0,7映射成1,然后就如下枚举:0,1,00,01,10,11.因为是映射的,所以可以前导0,然后我们就会知道给出的那个数 ...
- Ancient Messages UVA - 1103
题目链接:https://vjudge.net/problem/UVA-1103 题目大意:每组数据包含H行W列的字符矩阵(H<=200,W<=50) 每个字符为为16进制 你需要把它转 ...
- LRJ-Example-06-13-Uva1103
pic[][]数组存储每个点的值,0或1,输入时在原图的周围加了一圈0. color[][]数组存储每个点的color值,从1开始,dfs(row, col, c) 负责对每个点着色,连通在一起的连通 ...
随机推荐
- 设计模式之observer and visitor
很长时间一直对observer(观察者)与visitor(访问者)有些分不清晰. 今天有时间进行一下梳理: 1.observer模式 这基本就是一个通知模式,当被观察者发生改变时,通知所有监听此变化的 ...
- [收藏]谷歌htm/css规范
通用样式规范 协议 省略图片.样式.脚本以及其他媒体文件 URL 的协议部分(http:,https:),除非文件在两种协议下都不可用.这种方案称为 protocol-relative URL,好处是 ...
- ubuntu 搭建maven库 2.14.2-01并配置离线索引文件
前提 安装JDK版本1.8或者以上 1 下载 http://www.sonatype.org/nexus/archived/ 选择相应的版本 2 复制到/usr/local 下解压 sudo cp ...
- NethServer 7.2 RC1,增加深度数据包检测
NethServer 7.2 RC1 "Saltimbocca" 发布了,NethServer是基于CentOS的面向服务器的Linux发行.该产品的主要特性是模块化的设计,这使 ...
- C# 学习电子书资料分享mobi epub等格式
.NET之美:.NET关键技术深入解析 作者: 张子阳 出版社:机械工业出版社 大小:20.29MB 出版时间:14-01-01 格式:mobi ASP.NET 4权威指南 作者: 马伟 出版社: 大 ...
- WPF环境下多点触屏开发的一些经验(转)
本系列将介绍Multi-Touch(MT)多点触控技术的相关内容,使开发人员了解如何在Windows 平台中开发出具有MT 功能的应用程序.众所周知Windows 7 操作系统自身已经支持具有MT 功 ...
- 总结-css编码规范
一.注释 统一采用 :/* 注释内容 */ 二.命名 1.常用命名(多查单词) 参考命名规范.doc 2.选择器 1> [建议] 选择器的嵌套层级应不大于 3 级,位置靠后的限定条件应尽可能精确 ...
- Spark External Datasets
Spark能够从任何支持Hadoop的存储源来创建RDD,包括本地的文件系统,HDFS,Cassandra,Hbase,Amazon S3等.Spark支持textFile.SequenceFiles ...
- css 水平居中垂直居中的几种方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 用DropBox分享Unity3D的Web应用
用U3D做好游戏好想分享给亲朋好友体验怎么办?导出exe,apk都可以,只是下载始终是个门槛. 幸好还可以导出web版(虽然要安装unity3d的插件),但自己没有服务器怎么办,没关系~,现 在是云时 ...