欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-18 21:54:52
...

比赛链接

赛时:

我终于上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:正在思考...