51nod1832(二叉树/高精度模板+dfs)
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1832
题意: 中文题诶~
思路: 若二叉树中有 k 个节点只有一个子树, 则答案为 1 << k.
详情参见:http://blog.csdn.net/gyhguoge01234/article/details/77836484
代码:
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #define ll long long 5 using namespace std; 6 7 const int MAX = 1e2; 8 const int M = 1e9;//1e9为1节 9 const int MAXN = 35; 10 11 struct BigInt{ 12 const static int mod = 10000; 13 const static int DLEN = 4; 14 int a[600], len; 15 BigInt(){ 16 memset(a, 0, sizeof(a)); 17 len = 1; 18 } 19 BigInt(int v){ 20 memset(a, 0, sizeof(a)); 21 len = 0; 22 do{ 23 a[len++] = v % mod; 24 v /= mod; 25 }while(v); 26 } 27 BigInt(const char s[]){ 28 memset(a, 0, sizeof(a)); 29 int L = strlen(s); 30 len = L / DLEN; 31 if(L % DLEN) len++; 32 int index = 0; 33 for(int i = L - 1; i >= 0; i -= DLEN){ 34 int t = 0; 35 int k = i - DLEN + 1; 36 if(k < 0) k = 0; 37 for(int j = k; j <= i; j++) 38 t = t * 10 + s[j] - '0'; 39 a[index++] = t; 40 } 41 } 42 BigInt operator +(const BigInt &b)const{ 43 BigInt res; 44 res.len = max(len, b.len); 45 for(int i = 0; i <= res.len; i++) res.a[i] = 0; 46 for(int i = 0; i < res.len; i++){ 47 res.a[i] += ((i < len) ? a[i] : 0) + ((i < b.len) ? b.a[i] : 0); 48 res.a[i + 1] += res.a[i] / mod; 49 res.a[i] %= mod; 50 } 51 if(res.a[res.len] > 0) res.len++; 52 return res; 53 } 54 BigInt operator *(const BigInt &b)const{ 55 BigInt res; 56 for(int i = 0; i < len; i++){ 57 int up = 0; 58 for(int j = 0; j < b.len; j++){ 59 int temp = a[i] * b.a[j] + res.a[ i + j] + up; 60 res.a[i + j] = temp%mod; 61 up = temp / mod; 62 } 63 if(up != 0) 64 res.a[i + b.len] = up; 65 } 66 res.len = len + b.len; 67 while(res.a[res.len - 1] == 0 && res.len > 1) res.len--; 68 return res; 69 } 70 void output(){ 71 printf("%d", a[len - 1]); 72 for(int i = len - 2; i >= 0; i--) 73 printf("%04d", a[i]); 74 printf("\n"); 75 } 76 }; 77 78 // 先序遍历 X L … R … 79 // 后序遍历 … L … R X 80 81 const int N = 1e5 + 10; 82 int a[N], b[N]; 83 BigInt sol(1); 84 85 void dfs(int al, int ar, int bl, int br){ 86 if(ar - al <= 1) return; 87 al++; 88 br--; 89 int indx = bl, cnt = 0;; 90 while(a[al] != b[indx]) indx++; 91 int newar = al + (indx - bl + 1); 92 int newbr = indx + 1; 93 cnt++; 94 dfs(al, newar, bl, newbr); 95 if(ar - al != indx - bl + 1){ 96 cnt++; 97 dfs(newar, ar, newbr, br); 98 } 99 if(cnt == 1) sol = sol * 2; 100 } 101 102 int main(void){ 103 int n; 104 scanf("%d", &n); 105 for(int i = 0; i < n; i++){ 106 scanf("%d", &a[i]); 107 } 108 for(int i = 0; i < n; i++){ 109 scanf("%d", &b[i]); 110 } 111 sol = 1; 112 dfs(0, n, 0, n); 113 sol.output(); 114 return 0; 115 }
View Code
转载于:https://www.cnblogs.com/geloutingyu/p/7693105.html
51nod1832(二叉树/高精度模板+dfs)相关推荐
- [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS | BFS)
目录: 1.Binary Tree Level Order Traversal - 二叉树层次遍历 BFS 2.Binary Tree Level Order Traversal II - 二叉树层次 ...
- [二叉树|深搜|dfs] leetcode 404 左叶子之和
[二叉树|深搜|dfs] leetcode 404 左叶子之和 1.题目 题目链接 计算给定二叉树的所有左叶子之和. 示例: 3/ \9 20/ \15 7在这个二叉树中,有两个左叶子,分别是 9 和 ...
- 简单高精度模板(bzoj 1089: [SCOI2003]严格n元树)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 1831 Solved: 913 [Submit][Sta ...
- 二叉树非递归dfs——简单思路搞定前中后序遍历
前言:相信很多同学都被二叉树非递归dfs的前中后序遍历方法弄的头疼.网上的答案,什么前中后序遍历各有一套写法,还有什么一个栈的写法,两个栈的写法.看起来能理解,一闭眼自己写都记不住.今天介绍一种用一种 ...
- 高精度模板 洛谷Luogu P1932 A+B A-B A*B A/B Problem
P1932 A+B & A-B & A*B & A/B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 输入输出格式 输入格式: 两个数两行 ...
- 【算法模板】高精度模板(带图详解)
文章目录 一.高精度加法模板 二.高精度减法模板 三.高精度乘法模板 3.1 高精乘以低精(普遍用到) 高精乘以高精 四.高精度除法 4.1.高精度除以低精度 4.2.高精度除以高精度 一.高精度加法 ...
- 二叉树(类模板、函数模板、函数对象、函数指针)
这个二叉树的代码只是简单的实现了一些功能,比如插入和遍历.关键是用到了函数指针和函数对象,还有shared_ptr. 其中shared_ptr一定定义在节点中,因为new出来的空间时节点,释放的时候是 ...
- 高精度模板(含加减乘除四则运算)
高精度加高精度 1 void BigAddBig(char *a, char *b, char *c) 2 { 3 //a表示结果,b,c位加数 4 int a_int[1005] = { 0 }, ...
- 剑指offer面试题55 - I. 二叉树的深度(DFS)(递归)
题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 思路 详见链接 代码 class Solution:def ...
最新文章
- Microsoft Jet 数据库引擎找不到输入表或查询或者找不到文件
- 递归函数时间复杂度分析
- 彻底搞懂 python 中文乱码问题_Python BeautifulSoup中文乱码问题的2种解决方法
- HTC vive手柄无法识别
- android基础面试题(一)
- Padavan 老毛子路由器登录SSH教程
- 谷歌地图高清卫星地图
- 华为鸿蒙系统操作教程_鸿蒙OS Beta版怎么使用
- 【译】设计师不可不知的八大网页动画设计
- 一天一个 Linux 命令(27):mkfs 命令
- 关于刷微信投票的js代码
- BLE安全之SM剖析(1)
- 怎么订到特价机票(有可能比火车票还便宜哦)
- vue-element-admin整合spring-boot实现权限控制之用户管理篇
- 搜狗云输入法、Google手机语音搜索:两款创新云产品
- kerberos认证相关概念和流程
- sql:当一列为空时取另一列(case when then)
- 电子围栏与红外对射的区别
- C++ 域名空间和作用域
- linux运维培训后面试,Linux运维岗位面试中常见的面试问题汇总
热门文章
- seafile 部署_Seafile开启webdav及读写性能测试
- C语言中实际参数太多,c – 宏的实际参数太多了?
- 《MySQL——order by逻辑(全字段排序与rowid排序)》
- java 方法 示例_Java集合syncedList()方法与示例
- 如何检查数组是否包含JavaScript中的对象?
- 实验8 SQL Server 的存储过程
- pip安装deb_技术|如何在 Ubuntu 上安装 pip
- The security settings could not be applied to the database because the connection has failed安装Mysql
- linux中将光标与操作系统,linux操作系统基本命令介绍(2)
- codeforce 185 A——Plant