【NOIP冲刺】

L模拟赛小L的二叉树
【题目描述】
勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利。但是,小L对数据结构的掌握实在十分渣渣。
所以,小L当时卡在了二叉树。在计算机科学中,二叉树是每个结点最多有两个子结点的有序树。通常子结点被称作左孩子右孩子。二叉树被用作二叉搜索树和二叉堆。随后他又和他人讨论起了二叉搜索树。什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树。设key[p]表示结点p上的数值。对于其中的每个结点p,若其存在左孩子lch,则key[p]>key[lch];若其存在右孩子rch,则key[p]<key[rch];注意,本题中的二叉搜索树应满足对于所有结点,其左子树中的key小于当前结点的key,其右子树中的key大于当前结点的key。(因为小L十分喜欢装xx,所以这里他十分装xx的给大家介绍了什么是二叉树和二叉搜索树)。可是善于思考的小L不甘于只学习这些基础的东西。他思考了这样一个问题:现在给定一棵二叉树,可以任意修改结点的数值。修改一个结点的数值算作一次修改,且这个结点不能再被修改。若要将其变成一棵二叉搜索树,且任意时刻结点的数值必须是整数(可以是负整数或0),所要的最少修改次数。这一定难不倒聪明的你吧!如果你能帮小L解决这个问题,也许他会把最后的资产分给你1/16哦!
【输入格式】第一行一个正整数n表示二叉树节点数。节点从1~n进行编号。第二行n个正整数用空格分隔开,第i个数ai表示结点i的原始数值。此后n - 1行每行两个非负整数fa, ch,第i + 2行描述结点i + 1的父亲编号fa,以及父子关系ch(ch = 0 表示i + 1为左儿子,ch = 1表示i + 1为右儿子)为了让你稍微减轻些负担,小L规定:结点1一定是二叉树的根哦!【输出格式】仅一行包含一个整数,表示最少的修改次数。
【样例输入】 3 2 2 2 1 0 1 1【样例输出】 2
【数据范围】 20 %n <=10 , ai <= 100. 40 %n <= 100 , ai <= 200 60 %n <=2000 . 100 %n <= 10 ^ 5 , ai < 2 ^ 31.
L的牛栏

 

总结:虽然最后A掉了,但是说实话不是自己做出来的。

其实只要把题看清楚,再结合二叉树的一些常考点。(说实话二叉树的常考点就只要遍历二叉树。。。。)

这道题的提议是对于所有左儿子都大于根节点,所有右儿子都小于根节点。

虑左儿子<根节点<右儿子

只需要中序遍历,

然后求一个最长不下降序列即可。

需要特殊处理的地方是:由于中间不能取小数,。所以我们将原序列稍加修改,一个常见的将严格递增整数序列映射成非严格递增整

数序列的技巧就是将如下序列:

a1, a2, a3, a4 . an 映射成:

a1 - 1, a2 - 2, a3 - 3, a4 - 4 . an - n.

也就是说,原来如果a2-a1>=2 那么映射之手也满足a2>a1;

然而,如果原来 a2==a1+1 那么实际上 a2 是不会对a1 有贡献的,那么离散之后a2==a1 这样的话 就不会考虑错误的贡献了。

(这种方法常见于计数类问题)。

这样映射后求最长不下降子序列的长度就没问题了。

 

 

 

 


【题目描述】L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文,成功报送了叉院(羡慕不?)。勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后,凭着自己积累下的浓厚经济学与计算机学的基础,成功建设了一个现代化奶牛场!奶牛们十分聪明,于是在牛场建围栏时打算和小L斗智斗勇!小LN种可以建造围栏的木料,长度分别是l1,l2„lN,每种长度的木料无限。
修建时,他将把所有选中的木料拼接在一起,因此围栏的长度就是他使用的木料长度之和。但是聪明的小L很快发现很多长度都是不能由这些木料长度相加得到的,于是决定在必要的时候把这些木料砍掉一部分以后再使用。
不过由于小L比较节约,他给自己规定:任何一根木料最多只能削短M米。当然,每根木料削去的木料长度不需要都一样。不过由于测量工具太原始,小L只能准确的削去整数米的木料,因此,如果他有两种长度分别是711的木料,每根最多只能砍掉1,那么实际上就有4种可以使用的木料长度,分别是6 710, 11
因为小L相信自己的奶牛举世无双,于是让他们自己设计围栏。奶牛们不愿意自己和同伴在游戏时受到围栏的限制,于是想刁难一下小L,希望小L的木料无论经过怎样的加工,长度之和都不可能得到他们设计的围栏总长度。不过小L知道,如果围栏的长度太小,小L很快就能发现它是不能修建好的。因此她希望得到你的帮助,找出无法修建的最大围栏长度。这一定难不倒聪明的你吧!如果你能帮小L解决这个问题,也许他会把最后的资产分给你1/8哦!【输入格式】
输入的第一行包含两个整数N, M,分别表示木料的种类和每根木料削去的最大值。以下各行每行一个整数li(1< li< 3000),表示第i根木料的原始长度。【输出格式】
输出仅一行,包含一个整数,表示不能修建的最大围栏长度。如果任何长度的围栏都可以修建或者这个最大值不存在,输出-1【样例输入】 2 1 7 11 【样例输出】 15【数据范围】 40 %1< N<10, 0< M< 300 100 %1<N< 100, 0< M< 3000

总结:第一眼看到这个题应该就是想暴力。

暴力的话首先预处理出所有开始时候有哪些长度的围栏可以选。

然后暴力完全背包优化。一些,结果居然过了。

 

 

不要畏惧写暴力!暴力出奇迹!


L的珍珠挂饰
【题目描述】L通过泥萌的帮助,成功解决了牛栏的修建问题。奶牛们觉得主人非常厉害,于是再也不敢偷懒,母牛们奋力挤奶,生娃。子子孙孙无穷匮也!小L于是成为了一代富豪!但是一直困扰小L的就是单身问题!小L经过长久的寻觅,小L终于找到了一个心仪的漂亮妹子。于是,小L打算在520那天给妹子一个惊喜!(虽然小L很节约,但是对妹子还是很阔绰的!)L决定用K种珍珠为妹子做一串举世无双的珍珠垂饰。珍珠垂饰是由珍珠连接而成的,其长度可以认为就是珍珠垂饰上珍珠的个数。小L现在腰缠万贯,每种珍珠他都拥有N颗。根据将珍珠垂饰打开后珍珠不同的排列顺序可以区别不同种类的项链。现在,小L好奇自己可以组成多少种长度为1N的不同的珍珠垂饰?当然,为显富有,每串珍珠垂饰都要必须由K种珍珠连成。答案取模1234567891这一定难不倒聪明的你吧!如果你能帮小L解决这个问题,也许他会把最后的资产分给你1/4哦!【输入格式】
输入包含多组数据。第一行是一个整数T,表示测试数据的个数。每组数据占一行,包含两个整数NK,用一个空格隔开。【输出格式】
每组数据输出仅一行,包含一个整数,表示项链的种类数。【样例输入】 2 2 1 3 2【样例输出】 2 8【数据范围】 40 %1<=N<=100000, 0<=K<=30 70 %1<= N<= 1000000000, 0<=K<=30时限1000ms80%~100%T <= 10 1<=N<= 1000000000, 0<=K<=30时限:50ms

 

 

总结:

每次遇到这种题都是乱搞了很久然后还是做不出来。

所以说打算这种数列的题先想个一二十分钟没思路就丢掉好了

当然如果暴力的规律发现了也可以。就是不要乱搞。

 

这种题的一般解题步骤是:

找递推式à优化递推式(前缀和优化通项构造矩阵)

找规律除外。

那么这个题的递推式F[i][j]=F[i-1][j-1]*(k-j+1)+F[i-1][j]*j

构造矩阵,乱搞一个矩阵快速幂即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值