题目链接:https://vjudge.net/problem/UVA-1103

题解:通过观察题目,所给的几个象形符号可以由每个图像所包围产生的洞洞来确定,统计dfs对图中的块进行染色,然后再统计每个图中的所包围的块数,其中比较坑的是将十六进制转为二进制以后,坐标会发生变化,然后会导致各种错误,我仔细改了好久才AC的。

代码:

#include<iostream>
#include<set>
#include<string>
#include<cstring>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;const int maxn = 200 + 10;string code[256];int H, W;
int pic[maxn][maxn];
int color[maxn][maxn];int dr[4] = { 0,0,1,-1 };
int dc[4] = { 1,-1,0,0 };void dfs(int row, int col, int c) {if (row < 0 || col < 3 || row > H+1 || col > 4*(W+1))return;color[row][col] = c;for (int i = 0; i < 4; i++) {int r0 = row + dr[i];int c0 = col + dc[i];if (pic[r0][c0] == pic[row][col] && color[r0][c0] == 0) {dfs(r0, c0, c);}}
}int main() {code['0'] = "0000";code['1'] = "0001";code['2'] = "0010";code['3'] = "0011";code['4'] = "0100";code['5'] = "0101";code['6'] = "0110";code['7'] = "0111";code['8'] = "1000";code['9'] = "1001";code['a'] = "1010";code['b'] = "1011";code['c'] = "1100";code['d'] = "1101";code['e'] = "1110";code['f'] = "1111";int kase = 0;//freopen("input.txt","r",stdin);while ((cin >> H >> W) && W && H) {int cnt = 0;vector<int> ss;memset(color, 0, sizeof(color));memset(pic, 0, sizeof(pic));for (int i = 1; i <= H; i++) {for (int j = 1; j <= W; j++) {char ch;cin >> ch;for (int p = 0; p < 4; p++) {pic[i][4 * j + p] = code[ch][p]-'0';}}}for (int i = 0; i <= H+1; i++) {for (int j = 3; j <= (4*(W+1)); j++) {if (color[i][j]==0) {dfs(i, j, ++cnt);if (pic[i][j] == 1)ss.push_back(cnt);}}}vector<set<int> > neighbor(cnt+1);for (int i = 1; i <= H; i++) {for (int j = 4; j <= (4*(W+1)-1); j++) {if (pic[i][j] == 1) {for (int p = 0; p < 4; p++) {int r = i + dr[p];int c = j + dc[p];if (r >= 1 && r <= H&&c >= 4 && c <= (4*(W+1)-1)&&pic[r][c] == 0 && color[r][c] != 1) {neighbor[color[i][j]].insert(color[r][c]);}}}}}string words = "WAKJSD";vector<char> output;for (int i = 0; i < ss.size(); i++) {output.push_back(words[neighbor[ss[i]].size()]);}sort(output.begin(), output.end());cout << "Case " << ++kase << ": ";for (int i = 0; i < output.size(); i++)cout << output[i];cout << endl;}return 0;
}

古代象形符号,Ancient Messages,UVA1103相关推荐

  1. UVA1103 古代象形符号 Ancient Messages解题报告(DFS,字符串)难度⭐⭐⭐⭐

    题目翻译 为了识别3000年前古埃及用到的6种象形文字.每组数据包含一个H行W列的字符矩阵(H≤200,W≤50 ),每个字符为4个相邻像素点的十六进制(例如,10011100对应的字符就是9c).转 ...

  2. UVA1103 古代象形符号 Ancient Messages

    首先是理解题意,这个刘汝佳写的很明白了,其实就是找1里面包着的有多少个0的连通块,不同的1的块互不干扰不相邻不包含,然后我就看uva上的例子,想把16进制化成2进制然后看是不是对的上,结果硬是对不上号 ...

  3. UVA 1103 - Ancient Messages(古代象形符号) By SuCicada

    本题的目的是识别3000年前古埃及用到的6种象形文字,如图6-10所示. 图6-10 古代象形符号 每组数据包含一个H行W列的字符矩阵(H≤200,W≤50),每个字符为4个相邻像素点的 十六进制(例 ...

  4. Ancient Messages HDU - 3839

    题目链接:Ancient Messages HDU - 3839 =================================================== Ancient Message ...

  5. UVA - 1103:Ancient Messages

    Ancient Messages 来源:UVA 标签: 参考资料: 相似题目: 题目 In order to understand early civilizations, archaeologist ...

  6. 例题6-13 古代象形符号(Ancient Messages,World Finals 2011,UVa 1103)

    原题链接:https://vjudge.net/problem/UVA-1103 分类:图 备注:思维 前言:说实话我确实自己写不出,写下面代码的时候对一下uDebug,不过我没有看作者代码了(早就看 ...

  7. Uva1103 古代象形符号

    题目描述:题目很长,就贴一下题目连接吧=_=..https://vjudge.net/problem/UVA-1103 大意是输入一个H行W列的字符矩阵(H<=200, W<=50).每个 ...

  8. UVa1103古代象形符号

    分析:这个题如果看透了他难度可以降低非常大的一部分,但如果看不透,那这个题会难的让人无奈.真是醉了,这 个题的重点在于每个图形的洞数,说得对.就是洞数,这是这几个符号唯一的差异,因为每个图形的洞数都不 ...

  9. 例题6-13 古代象形符号 UVa1103

    1.题目描述:点击打开链接 2.解题思路:本题给出了一张图片的16进制的编码,要求找出这张图片中出现的符号.解码成二进制字符串后,实际上就是用普通的dfs解决了,不过如何进行dfs是本题的关键. 根据 ...

最新文章

  1. Leetcode 刷题笔记
  2. 转 安装php时报gd相关的错误(gd_ctx.c)
  3. Logger对象父子关系
  4. ReviewForJob——希尔排序(缩小增量排序)之塞奇威克增量序列
  5. 78.Subsets
  6. python有什么内容_python能做什么
  7. .net 实现Cookie跨域共享,单点登录SSO
  8. hexo html代码高亮,使用 prismjs 自定义 Hexo 代码高亮
  9. APPCAN学习笔记005---AppCan IDE安装下载,AppCan IDE启动
  10. Oracle中将小数转换成字符丢零.截取小数.除数为零解决法
  11. 基于javafx+sqlserver的仓库管理系统
  12. 微信h5棋牌以及下载类推广如何在微信中做好防封防屏蔽技术
  13. Arrays.sort(arr, (a, b) -> a - b)是对数组进行排序
  14. 大数据分析实战之异构数据源联合分析业务创新实践
  15. python+opencv实现文字颜色识别与标定
  16. Excel数据透视表的使用
  17. 【信号与系统】(六)连续系统的时域分析 ——冲激响应与阶跃响应
  18. 使用cmd命令导入导出数据库
  19. BI案例:BI在连锁零售业应用(ZT)【转】
  20. 学生会工作必备计算机知识,必备学生会工作总结范文合集九篇

热门文章

  1. 46、万维网之一(应用层)
  2. MTK 充电逻辑总结
  3. paddle基于bert的情绪识别
  4. 计算机应用etf基金代码,国泰中证计算机主题ETF联接C
  5. 世界上最远的距离-泰戈尔
  6. 解决开机出现“CLIENT MAC ADDR”的问题
  7. 深入浅出CChart 每日一课——快乐高四第五十八课 大道至简,炫彩界面库之接口代码优化
  8. jsp引入外部css或js不生效
  9. Windows中安装并配置Maven详细教程
  10. 灵魂有香气的女子李筱懿:自律,是追求更高级的快乐