jzoj(senior)2019.01.25【NOIP提高组】模拟 B 组总结

版权声明:本博客的博文版权为2018韦泽鑫所有,复制文章转载时记得附上本博客的地址哦 https://blog.csdn.net/qq_40167327/article/details/86676718

比赛链接

赛时:

我终于上100分啦!!!!!哈哈哈哈哈哈哈哈,T2数据太水啦!

T1:我骗了5分(我打了个wrong的暴力)

T2:我本想拿个部分分的(时间复杂度 ),结果…竟然AC啦,真棒!虽然这不是正解,但也有正解的分…可怜的那些想正解想半天的人

T3:我理解样例了,就是求全图每个点到另一个点的最短路径,将路径上的点(包括起点和终点)在ans数组里加1,最后输出ans数组,我写了一个Floyd,然后将路径上的每个点加进数组里(我在Floyd里加,所以WA了),然后输出答案,不过这连样例都过不了QAQ

总分:T1+T2+T3:5+100+0

赛后:

T1:我们先看题目:

3894. 【NOIP2014模拟10.26】改造二叉树 (不使用文件输入输出)
时间限制: 1000 ms  空间限制: 262144 KB
背景:
小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树。通常子结点被称作“左孩子”和“右孩子”。二叉树被用作二叉搜索树和二叉堆。随后他又和他人讨论起了二叉搜索树。
题目:
什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树。设key[p]表示结点p上的数值。对于其中的每个结点p,若其存在左孩子lch,则key[p]>key[lch];若其存在右孩子rch,则key[p]<key[rch];注意,本题中的二叉搜索树应满足对于所有结点,其左子树中的key小于当前结点的key,其右子树中的key大于当前结点的key。
小Y与他人讨论的内容则是,现在给定一棵二叉树,可以任意修改结点的数值。修改一个结点的数值算作一次修改,且这个结点不能再被修改。若要将其变成一棵二叉搜索树,且任意时刻结点的数值必须是整数(可以是负整数或0),所要的最少修改次数。
相信这一定难不倒你!请帮助小Y解决这个问题吧。
输入:
第一行一个正整数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为右儿子)。
结点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. 

题目提到key[p]>key[lch]>key[rch],当这颗树是二叉搜索树时,我们只要把这颗树用展开了就会得到一个连续上升序列,然而这颗树有可能不是二叉搜索树,那么中间就会有断开的点,设这个点是第i个点,有可能第i-1个点的值+1=第i+1个点的值,再设第一个点为x,那么下一个点最少是x+1,下下个点最小也得是x+2,这样子就得出了一个序列:x<x+1<x+2<x+3<x+4……如果是这样的话,那我们把刚刚式子中常数减掉后,我们就只需要求最长不下降子序列就好了。

T2:我们先看题目:

3895. 【NOIP2014模拟10.26】数字对 (不使用文件输入输出)
时间限制: 2000 ms  空间限制: 262144 KB
题目背景:
小H是个善于思考的学生,现在她又在思考一个有关序列的问题。
她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R <= n)。
这个特殊区间满足,存在一个k(L <= k <= R),并且对于任意的i(L <= i <= R),ai都能被ak整除。这样的一个特殊区间 [L, R]价值为R - L。
小H想知道序列中所有特殊区间的最大价值是多少,而有多少个这样的区间呢?这些区间又分别是哪些呢?你能帮助她吧。
输入:
第一行,一个整数n.
第二行,n个整数,代表ai.
输出:
第一行两个整数,num和val,表示价值最大的特殊区间的个数以及最大价值。
第二行num个整数,按升序输出每个价值最大的特殊区间的L.
样例输入:
输入1:
5
4 6 9 3 6
输入2:
5
2 3 5 7 11
样例输出:
输出1:
1 3
2
输出2:
5 0
1 2 3 4 5
数据限制:
30%: 1 <= n <= 30 , 1 <= ai <= 32.
60%: 1 <= n <= 3000 , 1 <= ai <= 1024.
80%: 1 <= n <= 300000 , 1 <= ai <= 1048576.
100%: 1 <= n <= 500000 , 1 <= ai < 2 ^ 31.

用RMQ算法算出区间的最小值和GCD(最大公约数),然后出答案

T3:正在思考…

猜你喜欢

转载自blog.csdn.net/qq_40167327/article/details/86676718
今日推荐