[HihoCoder]#1342 : Full Binary Tree Picture
2016-07-18 22:07
387 查看
华电北风吹
天津大学认知计算与应用重点实验室
2016-07-17
题目链接:
http://hihocoder.com/problemset/problem/1342
题目分析:
从树的根节点开始递归即可。关键在于计算好左右子孩子坐标。
参考代码:
天津大学认知计算与应用重点实验室
2016-07-17
题目链接:
http://hihocoder.com/problemset/problem/1342
题目分析:
从树的根节点开始递归即可。关键在于计算好左右子孩子坐标。
参考代码:
#include <iostream> #include <math.h> using namespace std; int CountWidth(int n) { return pow(2, n + 1) - pow(2, n - 1) - 1; } void CountLeftChild(int N, int x, int y, int &x_leftChild, int &y_leftChild) { int N_width = CountWidth(N); int N_x2, N_y1; N_y1 = y - N_width / 2; N_x2 = x + N_width / 2; if (N > 2) { int ChildWidth = CountWidth(N - 1); x_leftChild = N_x2 - ChildWidth / 2; y_leftChild = N_y1 + ChildWidth / 2; } else { x_leftChild = N_x2; y_leftChild = N_y1; } } void CountRightChild(int N, int x, int y, int &x_rightChild, int &y_rightChild) { int N_width = CountWidth(N); int N_x2, N_y2; N_y2 = y + N_width / 2; N_x2 = x + N_width / 2; if (N > 2) { int ChildWidth = CountWidth(N - 1); x_rightChild = N_x2 - ChildWidth / 2; y_rightChild = N_y2 - ChildWidth / 2; } else { x_rightChild = N_x2; y_rightChild = N_y2; } } int func(int N, int x, int y, const int x1, const int y1, const int x2, const int y2) { int count = 0; if (x > x2) return 0; int x_leftChild, y_leftChild; int x_rightChild, y_rightChild; CountLeftChild(N, x, y, x_leftChild, y_leftChild); CountRightChild(N, x, y, x_rightChild, y_rightChild); if ((x >= x1) && (x <= x2) && (y >= y1) && (y <= y2)) { count++; } if (N > 1) { if (y <= y1) { count += func(N - 1, x_rightChild, y_rightChild, x1, y1, x2, y2); } else if (y >= y2) { count += func(N - 1, x_leftChild, y_leftChild, x1, y1, x2, y2); } else { count += func(N - 1, x_rightChild, y_rightChild, x1, y1, x2, y2) + func(N - 1, x_leftChild, y_leftChild, x1, y1, x2, y2); } } return count; } int main() { int N, M; cin >> N >> M; while (M--) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; cout << func(N, 0, 0, x1, y1, x2, y2) << endl; } return 0; }
相关文章推荐
- 学校实验室交换机上网,没有自动拨号时的设置
- JSP之JSTl标签
- wpf 与winform 之间拖拽数据
- workerman高性能socket服务器框架搭建
- JS:(JavaScript)
- iOS基础:手势
- NUMA
- KMP之next总结
- android 布局滑动中scrollTo 和 scrollBy 方法使用说明
- 我的第一个小项目上线啦&sql注入式攻击
- HDU 5695 Gym Class(拓扑排序、优先队列)
- HDU 2087(KMP)
- html
- 字符串编辑距离(相似度)
- CCNA系列二之RIP路由
- 论菜鸟的自我修养
- [fjwc2015]Screen [从hzw神犇那里扒来的题]
- AJAX
- 网络游戏分类
- c++教程(二:Structure of a program)