51nod 1832 先序遍历与后序遍历(dfs+高精度)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1832
题意:
思路:
官方题解如下:
可以看一下这篇文章:https://wenku.baidu.com/view/a2a45aa0284ac850ad024261.html
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<queue>
- using namespace std;
- const int maxn = +;
- const int inf = 0x3f3f3f3f;
- int n;
- int a[maxn],b[maxn];
- struct BigInt
- {
- const static int mod = ;
- const static int DLEN = ;
- int a[],len;
- BigInt()
- {
- memset(a,,sizeof(a));
- len = ;
- }
- BigInt(int v)
- {
- memset(a,,sizeof(a));
- len = ;
- do
- {
- a[len++] = v%mod;
- v /= mod;
- }while(v);
- }
- BigInt(const char s[])
- {
- memset(a,,sizeof(a));
- int L = strlen(s);
- len = L/DLEN;
- if(L%DLEN)len++;
- int index = ;
- for(int i = L-;i >= ;i -= DLEN)
- {
- int t = ;
- int k = i - DLEN + ;
- if(k < )k = ;
- for(int j = k;j <= i;j++)
- t = t* + s[j] - '';
- a[index++] = t;
- }
- }
- BigInt operator +(const BigInt &b)const
- {
- BigInt res;
- res.len = max(len,b.len);
- for(int i = ;i <= res.len;i++)
- res.a[i] = ;
- for(int i = ;i < res.len;i++)
- {
- res.a[i] += ((i < len)?a[i]:)+((i < b.len)?b.a[i]:);
- res.a[i+] += res.a[i]/mod;
- res.a[i] %= mod;
- }
- if(res.a[res.len] > )res.len++;
- return res;
- }
- BigInt operator *(const BigInt &b)const
- {
- BigInt res;
- for(int i = ; i < len;i++)
- {
- int up = ;
- for(int j = ;j < b.len;j++)
- {
- int temp = a[i]*b.a[j] + res.a[i+j] + up;
- res.a[i+j] = temp%mod;
- up = temp/mod;
- }
- if(up != )
- res.a[i + b.len] = up;
- }
- res.len = len + b.len;
- while(res.a[res.len - ] == &&res.len > )res.len--;
- return res;
- }
- void output()
- {
- printf("%d",a[len-]);
- for(int i = len-;i >= ;i--)
- printf("%04d",a[i]);
- printf("\n");
- }
- };
- BigInt ans;
- void dfs(int al, int ar, int bl, int br)
- {
- if(ar-al<=) return;
- al++;
- br--;
- int cnt = ;
- int index = bl;
- while(a[al]!=b[index]) index++;
- int newar = al+index-bl+;
- int newbl = index+;
- cnt++;
- dfs(al,newar-,bl,index);
- if(ar-al!=index-bl)
- {
- cnt++;
- dfs(newar,ar,newbl,br);
- }
- if(cnt==) ans=ans*;
- }
- int main()
- {
- //freopen("in.txt","r",stdin);
- ans = ;
- scanf("%d",&n);
- for(int i=;i<n;i++) scanf("%d",&a[i]);
- for(int i=;i<n;i++) scanf("%d",&b[i]);
- dfs(,n-,,n-);
- ans.output();
- return ;
- }
51nod 1832 先序遍历与后序遍历(dfs+高精度)的更多相关文章
- 51nod 1832 先序遍历与后序遍历【二叉树+高精度】
题目链接:51nod 1832 先序遍历与后序遍历 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 对于给定的一个二叉树的先序遍历和后序遍历,输出有多少种满足条件的 ...
- 51Nod 算法马拉松28 A题 先序遍历与后序遍历 分治
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - 51Nod1832 题意概括 对于给定的一个二叉树的先序遍历和后序遍历,输出有多少种满足条件的二叉树. 两棵二 ...
- lintcode: 中序遍历和后序遍历树构造二叉树
题目 中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 / \ 1 3 注意 你可 ...
- java编写二叉树以及前序遍历、中序遍历和后序遍历 .
/** * 实现二叉树的创建.前序遍历.中序遍历和后序遍历 **/ package DataStructure; /** * Copyright 2014 by Ruiqin Sun * All ri ...
- python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)
python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...
- 根据 中序遍历 和 后序遍历构造树(Presentation)(C++)
好不容易又到周五了,周末终于可以休息休息了.写这一篇随笔只是心血来潮,下午问了一位朋友PAT考的如何,顺便看一下他考的试题,里面有最后一道题,是关于给出中序遍历和后序遍历然后求一个层次遍历.等等,我找 ...
- TZOJ 3209 后序遍历(已知中序前序求后序)
描述 在数据结构中,遍历是二叉树最重要的操作之一.所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问. 这里给出三种遍历算法. 1.中序遍历的递归算法定义: ...
- javascript数据结构与算法--二叉树遍历(后序)
javascript数据结构与算法--二叉树遍历(后序) 后序遍历先访问叶子节点,从左子树到右子树,再到根节点. /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ ...
- LintCode2016年8月8日算法比赛----中序遍历和后序遍历构造二叉树
中序遍历和后序遍历构造二叉树 题目描述 根据中序遍历和后序遍历构造二叉树 注意事项 你可以假设树中不存在相同数值的节点 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下 ...
- 数据结构实习 - problem K 用前序中序建立二叉树并以层序遍历和后序遍历输出
用前序中序建立二叉树并以层序遍历和后序遍历输出 writer:pprp 实现过程主要是通过递归,进行分解得到结果 代码如下: #include <iostream> #include &l ...
随机推荐
- plsql注册-转
注册码:Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769 password:xs374ca https://blo ...
- 20165305 实验一: Java开发环境的熟悉
实验1-1 建立"自己学号exp1"的目录. 在"自己学号exp1"目录下建立src,bin等目录. javac,java的执行在"自己学号exp1& ...
- 通过Hive将数据写入到ElasticSearch
我在<使用Hive读取ElasticSearch中的数据>文章中介绍了如何使用Hive读取ElasticSearch中的数据,本文将接着上文继续介绍如何使用Hive将数据写入到Elasti ...
- Spring boot 问题总结
1. Spring boot 嵌入的tomcat不能启动: Unregistering JMX-exposed beans on shutdown 在官网(http://start.spring. ...
- 证券化代币的时代已经到来,STO将引爆区块链经济
STOs 似乎会在 2019 年取代 ICOs,即使不是完全取代,但置换的比例也会相当大.所有在美上市的公司都将按照 SEC 制定的相关规定进行交易.Vellum Capital 的 CEO 兼管理合 ...
- LUHN 模10 算法 银行卡校验
信用卡Luhn算法(模10)具体的校验过程如下: 1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. 2.从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去 ...
- 使用github管理Eclipse分布式项目开发
使用github管理Eclipse分布式项目开发 老关我在前面的博文(github管理iOS分布式项目开发)中介绍了github管理iOS分布式开发,今天老关将向大家介绍使用github管 理Ecli ...
- ogg 12.3 中 format release的变化
Non-CDB databases with compatibility set to 12.1, FORMAT RELEASE 12.2 or above is supported. Non-CDB ...
- codevs——1003——电话连线
题目描述 Description 一个国家有n个城市.若干个城市之间有电话线连接,现在要增加m条电话线(电话线当然是双向的了),使得任意两个城市之间都直接或间接经过其他城市有电话线连接,你的程序应该能 ...
- laravel 数据库 - 增删查改
//查询public function select(){ /** 数据表 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...