297 - Quadtrees
来源:互联网 发布:软件著作权和知识产权 编辑:程序博客网 时间:2024/05/01 23:07
题目:297 - Quadtrees
题目大意:给两个四叉树,合并成一个四叉数,并求最后的那个四叉树的黑色的面积。
解题思路:1、我是先忽略第一个根节点来建树的,所以要考虑第一个为1,和为0的情况。
2、将字符串转换成对应的数的数组,p为2,f为1,e为0, 需要buildtree();建树的时候可以用递归,因为每个p对应都有四个孩子,如果孩子里面还有p的话就再次调用buildtree()。直到为‘\0’就结束。
3、然后将两个数组合并,特别要考虑1,和0合并的情况。要将这两个数的孩子都变为0.需要一个merge();
4、最后就要统计黑色的大小,因为最多5层,所以可以列举出来下标为多少到多少是第n层的(不包扩第一个根节点)。第n层的黑色圈的就是1024/ 4^n;
#include<stdio.h>#include<string.h>#include<math.h>const int N = 32;const int M = 1365;char str1[10000], str2[10000];int s[2][M], n, t;void buildtree1(int i) {int k = (i + 1) * 4;for(int j = 0; j < 4; j++) {n++;if(str1[n] == 'p') {s[0][k + j] = 2;buildtree1(k + j);}else if(str1[n] == 'e')s[0][k + j] = 0;else if(str1[n]== 'f')s[0][k + j] = 1;else if(str1[n] == '\0')return;}}void buildtree2(int i) {int k = (i + 1) * 4;for(int j = 0; j < 4; j++) {n++;if(str2[n] == 'p') {s[1][k + j] = 2;buildtree2(k + j);}else if(str2[n] == 'e')s[1][k + j] = 0;else if(str2[n]== 'f')s[1][k + j] = 1;else if(str2[n] == '\0')return;}}void merge(int i) {int j = (i + 1) * 4;for(int m = 0; m < 4; m++) {if(j + m >= M )return ;else {s[0][j + m] = s[1][j + m] = 0;merge(j + m);}}}int main() {scanf("%d", &t);while(t--) {int count = 0, i;n = 0;memset(s, 0, sizeof(s));scanf("%s%s", &str1, &str2);if(strlen(str1) != 1)buildtree1(-1);else {if(str1[0] == 'f') { printf("There are 1024 black pixels.\n"); continue;}}if(strlen(str2) != 1) {n = 0;buildtree2(-1);}else {if(str2[0] == 'f') {printf("There are 1024 black pixels.\n");continue;}}if(str1[0] == 'e' && str2[0] == 'e') {printf("There are 0 black pixels.\n");continue;}for(i = 0; i < M; i++) {if((s[0][i] == 2 && (s[1][i] == 2 || s[1][i] == 0)) || (s[1][i] == 2 && (s[0][i] == 2 || s[0][i] == 0)) )continue;if((s[0][i] == 2 && s[1][i] == 1 )|| (s[1][i] == 2 && s[0][i] == 1)) {s[0][i] = 1;merge(i);continue;}if(s[0][i] + s[1][i] == 1)s[0][i] += s[1][i];}int sum = 0, num, d;for(i = 0; i < M; i++) {if(s[0][i] == 1) {num = i;if(num >= 0 && num <= 3)d = 1;else if(num >= 4 && num <= 19)d = 2;else if(num >= 20 && num <= 83)d = 3;else if(num >= 84 && num <= 339)d = 4;else if(num >= 340 && num <= 1364)d = 5;sum += 32 * 32 /(int) pow(4, d);}}printf("There are %d black pixels.\n", sum);}return 0;}
0 0
- 297 - Quadtrees*****
- 297 - Quadtrees
- 297 - Quadtrees
- 297 - Quadtrees
- 297 - Quadtrees
- 297 - Quadtrees
- 297 - Quadtrees
- 297 - Quadtrees
- 297 - Quadtrees
- uva 297 - Quadtrees
- uva 297 Quadtrees
- uva 297 - Quadtrees
- Uva 297 - Quadtrees
- UVA 297 - Quadtrees
- uva 297 Quadtrees
- UVA 297 - Quadtrees
- dfs uva-297-Quadtrees
- UVa 297 - Quadtrees
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 将组建编译成dpk包文件
- UVa 123 - Searching Quickly解题报告
- RTF格式的深入研究
- 树、森林和二叉树的转换
- 297 - Quadtrees
- 字符串常用的知识
- Cocos2d-x学习(1)
- java、memcached的配置及使用。
- 蓝桥杯-平面四点平均距离最小
- hdu4652(概率DP,推公式)
- 经典vim插件功能说明、安装方法和使用方法介绍
- cocos2dx三种定时器的使用以及停止schedule,scheduleUpdate,scheduleOnce
- java memcached 在windows下面安装memcached服务