Uva - 297 - Quadtrees
2015-06-16 12:14
351 查看
给了先序遍历就可以确定整个数,只需要递归的把整个图画出来就可以了,把两个图像画到同一张纸上,画的同时统计黑像素的个数,画完结果就有了。
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cctype> #include <cstring> #include <string> #include <sstream> #include <vector> #include <set> #include <map> #include <algorithm> #include <stack> #include <queue> #include <bitset> #include <cassert> using namespace std; const int len = 32; const int maxn = 1034; char s[maxn]; int buf[len][len], cnt; // 在buf中绘制 void draw(const char* s, int& p, int r, int c, int w) { char ch = s[p++]; if (ch == 'p') { draw(s, p, r, c + w / 2, w / 2); // 画1区域 draw(s, p, r, c, w / 2); // 画2区域 draw(s, p, r + w / 2, c, w / 2); // 画3区域 draw(s, p, r + w / 2, c + w / 2, w / 2); // 画4区域 } else if (ch == 'f'){ for (int i = r; i < r + w; i++) { for (int j = c; j < c + w; j++) { if (buf[i][j] == 0) { // 如果画了黑像素,就不要再画了,这个两个图在一张纸buf上画 buf[i][j] = 1; cnt++; // 计算黑像素点的个数 } } } } } int main() { int T; cin >> T; while (T--) { memset(buf, 0, sizeof(buf)); // 清空画图区域 cnt = 0; // 记得把黑像素点的个数清空 for (int i = 0; i < 2; i++) { cin >> s; int p = 0; // 把两个图画到同一个buf中,这样就相当于已经加起来了 draw(s, p, 0, 0, len); } printf("There are %d black pixels.\n", cnt); } return 0; }
相关文章推荐
- 父元素与子元素之间的margin-top问题(css hack)
- 使用句柄和引用计数器避免浅拷贝和浅赋值后内存空间二次释放
- Opencv批量读取文件夹图片
- Codeforces Round #307 (Div. 2) A. GukiZ and Contest (暴力)
- 【Util】 时间天数增加,时间比较。
- C#实现为一张大尺寸图片创建缩略图的方法
- 沟通信息不对称“模型”
- 大屏 iPhone 的适配
- 不要嫉妒不要恐惧不要贪婪
- 定制你的 Android 设备:认识 Xposed
- ajax重新认识:(1)ajax初步
- 简述AngularJS的控制器的使用
- Struts2异常或错误不输出到控制台原因及解决办法
- 配置haoop,datanode启动不了解决方式
- Android Animation学习笔记
- 影视巨头都给BAT打工?现在说还有点早
- Android 中Parcelable的作用
- Android动画学习笔记-Android Animation
- adt-bundle-linux/sdk/platform-tools/adb error=2 No such file or directory 缺少ia32-libs
- MySQL 索引优化全攻略