CCF全国信息学奥林匹克联赛(NOIP2018)复赛普及组复赛真题(PDF版,无答案)

文档属性

名称 CCF全国信息学奥林匹克联赛(NOIP2018)复赛普及组复赛真题(PDF版,无答案)
格式 pdf
文件大小 626.5KB
资源类型 教案
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2021-04-26 10:54:29

图片预览

文档简介

全国信息学奥林匹克联赛( NOIP2018)复赛 普及组
CCF 全国信息学奥林匹克联赛 ( NOIP2018) 复赛

普及组
(请选手务必仔细阅读本页内容)

一.题目概况
中文题目名称 标题统计 龙虎斗 摆渡车 对称二叉树
英文题目与子目录名 title fight bus tree
可执行文件名 title fight bus tree
输入文件名 title.in fight.in bus.in tree.in
输出文件名 title.out fight.out bus.out tree.out
每个测试点时限 1秒 1秒 2秒 1秒
测试点数目 20 25 20 25
每个测试点分值 5 4 5 4
附加样例文件 有 有 有 有
结果比较方式 全文比较 ( 过滤行末空格及文末回车 )
题目类型 传统 传统 传统 传统
运行 内存上限 256M 256M 256M 256M

二.提交源程序文件名
对于 C++语言 title.cpp fight.cpp bus.cpp tree.cpp
对于 C语言 title.c fight.c bus.c tree.c
对于 pascal语言 title.pas fight.pas bus.pas tree.pas

三.编译命令(不包含任何优化开关)
对于 C++语言 g++ -o title g++ -o fight g++ -o bus g++ -o tree
title.cpp -lm fight.cpp -lm bus.cpp -lm tree.cpp -lm
对于 C语言 gcc -o title title.c gcc -o fight fight.c gcc -o bus gcc -o tree tree.c
-lm -lm bus.c -lm -lm
对于 pascal语言 fpc title.pas fpc fight.pas fpc bus.pas fpc tree.pas

注意 事项 :
1、 文件名 (程序名和输入输出文件名) 必须使用 英文 小写 。
2、 C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。
3、 全国统一评测时采用的机器配置为: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz, 内存
32GB。 上述时限以此配置为准。
4、只提供 Linux格式附加样例文件。
5、特别提醒: 评测在当前最新公布的 NOI Linux下进行,各语言的编译器版本以其为准 。
第 1页共 9页

全国信息学奥林匹克联赛( NOIP2018)复赛 普及组
1. 标题统计
(title.cpp/c/pas)
【问题描述】
凯凯 刚 写了一篇 美妙 的 作文 ,请问这篇作文的标题中有 多少 个字符?
注意:标题中 可能包含大、小写英文字母、数字字符 、 空格 和换行符 。统计标题字
符数时,空格 和换行符 不计 算在内 。

【输入 格式 】
输入文件名为 title.in。
输入文件只有 一 行, 一个字符串 s。

【输出 格式 】
输出文件名为 title.out。
输出文件只有 一 行,包含一个 整数,即 作文标题的字符数 (不含空格 和换行符 ) 。

【输入输出样例 1】
title.in title.out
234 3

见选手目录下的 title/title1.in和 title/title1.ans。
【 输入输出样例 1说明 】
标题中共有 3个 字符,这 3个字符都是 数字 字符 。

【输入输出样例 2】
title.in title.out
Ca 45 4

见选手目录下的 title/title2.in和 title/title2.ans。
【 输入输出样例 2说明 】
标题中共有 5个字符, 包括 1个大写英文字母, 1个小写英文字母 和 2个数字字符 ,
还有 1个空格 。由于空格 不计入结果中 ,故标题的 有效 字符数为 4个 。

【数据规模与约定 】
规定 |s| 表示字符串 s 的长度(即 字符串中的 字符 和空格 数)。
对于 40% 的数据 , 1 ≤|s| ≤5,保证输入为数字字符 及行末换行符 。
对于 80% 的数据, 1 ≤|s| ≤5,输入 只 可能 包含 大、小写英文字母 、 数字字符 及
行末换行符 。
对于 100% 的数据, 1 ≤ |s|≤ 5,输入可能包含大 、小 写英文字母 、 数字字符 、 空
格 和行末换行符 。


第 2页共 9页

全国信息学奥林匹克联赛( NOIP2018)复赛 普及组
2. 龙虎斗
(fight.cpp/c/pas)
【问题描述】
轩轩和凯凯正在玩一款叫《龙虎斗》的游戏, 游戏的 棋盘 是一条线段, 线段上有 ????
个兵营(自左至右编号 1 ~ ????) , 相邻编号的兵营之间相隔 1 厘米 , 即 棋盘为 长度为
?????1 厘米 的线段 。 ???? 号兵营里有 c???? 位工兵 。
下面 图 1为 ???? = 6 的 示 例:
图 1. ???? =6的 示例
轩轩在左侧,代表“龙”;凯凯在右侧,代表“虎”。 他们以 m 号兵营作为分界,
靠左的工兵属于龙势力,靠右的工兵属于虎势力 ,而 第 ???? 号兵营中的工兵很纠结,他
们不属于任何一方 。
一个兵营的气势为:该兵营中的工兵数 × 该兵营到 m 号兵营的距离 ;参与游戏
一方的势力定义为:属于这一方所有兵营的气势之和。
下 面 图 2为 n= 6,???? =4 的 示 例 ,其中 红色为龙方 , 黄色为虎方 :
图 2. n = 6,???? = 4的示例
游戏过程中,某一刻 天降神兵, 共有 ????1 位工兵突然出现 在了 ????1 号 兵营 。 作为 轩
轩和凯凯的朋友, 你知道如果龙虎双方气势差距太悬殊,轩轩和凯凯就不愿意继续玩下
去了。 为了让游戏继续, 你需要选择一个兵营 ????2, 并 将 你 手里的 ????2 位 工兵 全部 派 往
兵营 ????2,使得双方气势差距尽可能小。
注意: 你手中的 工兵落在哪个兵营,就和 该兵营中 其他工兵有相同的势力归属(如
果落在 m 号兵营,则不属于任何势力 )。

【输入格式】
输入文件名为 fight.in。
输入文件的第一行包含一 个正整数 ????,代表 兵营 的数量 。
接下来 的 一 行 包含 ???? 个正整数, 相邻两数之间 以 一个 空格 分隔 , 第 ???? 个正整数代
表 编号为 ???? 的 兵营中起始时的工兵数量 ????????。
接下来 的 一行 包含 四个正整数, 相邻两数间 以 一个 空格 分隔 ,分别代表 ????,????1,????1,????2。
【输出格式】
输出文件名为 fight.out。
输出文件有 一 行, 包含 一 个 正 整数, 即 ????2,表示 你选择的 兵营 编号。 如果存在多
个编号 同时满足最优,取 最 小的编号。

【输入输出样例 1】
fight.in fight.out
6 2
2 3 2 3 2 3
4 6 5 2

第 3页共 9页

全国信息学奥林匹克联赛( NOIP2018)复赛 普及组
见选手目录下的 fight/fight1.in和 fight/fight1.ans。
【输入输出样例 1说明】
见 问 题 描述 中 的 图 2。
双方以 ???? =4 号兵营 分界 , 有 ????1 = 5 位工兵突然出现在 ????1 = 6 号兵营。
龙方的气势 为:
2×(4?1)+3×(4?2)+2×(4?3) = 14
虎方的气势 为:
2×(5?4)+(3+5)×(6?4) =18
当 你将手中的 ????2 = 2 位工兵派往 ????2 =2 号兵营 时, 龙方的气势 变为:
14+2×(4?2) =18
此时 双方气势 相等 。

【输入输出样例 2】
fight.in fight.out
6 1
1 1 1 1 1 16
5 4 1 1

见选手目录下的 fight/fight2.in和 fight/fight2.ans。
【输入输出样例 2说明】
双方以 ???? =5 号兵营分界,有 ????1 = 1 位工兵突然出现在 ????1 = 4 号兵营。
龙方的气势为 :
1×(5?1)+1×(5?2)+1×(5?3)+(1+1)×(5?4) = 11
虎方的气势为 :
16×(6?5) =16
当你将手中的 ????2 = 1 位工兵派往 ????2 =1 号兵营时,龙方的气势变为:
11+1×(5?1) =15
此时 可以使 双方气势的差距 最小。

【输入输出样例 3】
见选手目录下的 fight/fight3.in和 fight/fight3.ans。

【数据规模与约定】
1 对于 20% 的数据, ???? =3, ???? =2, ???????? =1, ????1,????2 ≤ 100。
另有 20% 的数据, ???? ≤10, ????1 = ????, ???????? = 1, ????1,????2 ≤ 100。
对于 60% 的数据, ???? ≤100, ???????? = 1, ????1,????2 ≤ 100。
对于 80% 的数据, ???? ≤100, ????????,????1,????2 ≤100。
对于 100% 的数据, ???? ≤ 105, ????????,???? 9
1,????2 ≤ 10 。

第 4页共 9页

全国信息学奥林匹克联赛( NOIP2018)复赛 普及组
3. 摆渡车
(bus.cpp/c/pas)
【问题描述】
有 ???? 名同学要乘坐摆渡车从人大附中前往 人民大学 , 第 ???? 位同学在第 ???????? 分钟去
等车 。 只有一辆摆渡车在工作 ,但摆渡车容量可以视为无限大 。 摆渡车从人大附中出发、
把 车上的 同学送到人民大学、再回到人大附中 ( 去接其他同学 ),这样往返一趟 总共花
费 ???? 分钟 (同学上下车时间忽略不计)。 摆渡车要将所有同学都送到人民大学 。
凯凯很好奇,如果 他能任意安排 摆渡车出发的时间, 那么 这些同学的等车时间之和
最小为多少呢 ?
注意:摆渡车回到人大附中后可以即刻出发。

【输入 格式 】
输入文件名为 bus.in。
第一行包含两个正整数 ????, m,以一个空格分开,分别代表 等车人数和摆渡车往返
一趟的时间。
第二行 包含 ???? 个正整数, 相邻两数之间 以 一个 空格分隔, 第 i 个 非负 整数 ???????? 代
表 第 i 个同学到达车站的时刻。

【输出 格式 】
输出文件名为 bus.out。
输出 一行,一个整数,表示 所有同学等车 时间 之和的最小值 ( 单位: 分钟) 。

【输入输出样例 1】
bus.in bus.out
5 1 0
3 4 4 3 5

见选手目录下的 bus/bus1.in和 bus/bus1.ans。
【输入输出样例 1说明】
同学 1 和同学 4 在第 3 分钟开始等车, 等待 0 分钟, 在第 3 分钟 乘坐摆渡车
出发。 摆渡车 在 第 4 分钟回到 人大附中 。
同学 2 和同学 3 在第 4 分钟开始等车,等待 0 分钟,在第 4 分钟乘坐摆渡车
出发。摆渡车在第 5 分钟回到人大附中。
同学 5 在第 5 分钟开始等车,等待 0 分钟,在第 5 分钟乘坐摆渡车出发。 自此
所有同学 都被送到人民大学 。总等待时间为 0。

【输入输出样例 2】
bus.in bus.out
5 5 4
11 13 1 5 5

见选手目录下的 bus/bus2.in和 bus/bus2.ans。

第 5页共 9页

全国信息学奥林匹克联赛( NOIP2018)复赛 普及组

【输入输出样例 2说明】
同学 3 在第 1 分钟开始等车,等待 0 分钟 , 在第 1 分钟乘坐摆渡车出发。摆渡
车在第 6 分钟回到人大附中。
同学 4 和同学 5 在第 5 分钟开始等车,等待 1 分钟 , 在第 6 分钟乘坐摆渡车
出发。摆渡车在第 11 分钟回到人大附中。
同学 1 在第 11 分钟开始等车,等待 2 分钟;同学 2 在第 13 分钟开始等车,
等待 0 分钟。他 /她们在第 13 分钟乘坐摆渡车出发。 自此所有同学都被送到人民大学。
总等待时间为 4。可以证明,没有总等待时间小于 4 的 方案。

【输入输出样例 3】
见选手目录下的 bus/bus3.in和 bus/bus3.ans。

【数据规模与约定】
对于 10% 的数据, ???? ≤10, ???? =1, 0≤ ???????? ≤100。
对于 30% 的数据, ???? ≤20, ???? ≤ 2, 0 ≤???????? ≤100。
对于 50% 的数据, ???? ≤500, ???? ≤100, 0 ≤???????? ≤ 104。
另有 20% 的数据, ???? ≤500, ???? ≤10, 0≤ ???? 6
???? ≤4×10 。
对于 100% 的数据, ???? ≤ 500, ???? ≤100, 0≤ ???? 6
???? ≤4×10 。


第 6页共 9页

全国信息学奥林匹克联赛( NOIP2018)复赛 普及组
4. 对称二叉树
(tree.cpp/c/pas)
【问题描述】
一棵 有点权的 有根 树 如果 满足以下条件,则被 轩轩 称为 对称二叉树 :
1. 二叉树 ;
2. 将这 棵树 所有 节点的左右 子树交换,新树和原树对应位置的 结构相同且 点权相
等。

下图 中节点内的数字为权值,节点外的 ???????? 表示节点 编号 。

对称二叉树 非对称二叉树 非对称二叉树
( 权值不对称 ) ( 结构不对称 )
原树

所有节
点的左
右子树
交换 后


现在给出一棵 二叉树,希望你 找 出它的一棵子树 , 该子树为对称二叉树 , 且节点数
最多 。 请 输出这棵 子树的 节点数。
注意:只有树根的树也是对称二叉树。 本题中 约定, 以 节点 ???? 为 子树 根 的 一 棵 “子
树”指 的是 : 节点 ???? 和它 的 全部 后代节点 构成的二叉树 。


【输入格式】
输入文件名为 tree.in。
第一行一 个正整数 ????, 表示 给 定 的树的节点的 数目 , 规定节点编号 1~n,其中 节点
1 是树根 。
第二行 ???? 个正整数, 用 一个 空格分隔, 第 ???? 个正整数 ???????? 代表节点 ???? 的权值 。
接下来 ???? 行,每行两个正整数 ????????, ????????,分别表示 节点 ???? 的 左右孩子的 编 号 。 如果
不存在左 / 右孩子,则 以 ?1 表示 。 两个数之间用一个空格隔开。

【输出格式】
输出文件名为 tree.out。
输出文件 共一行, 包含 一个整数,表示 给定的树的最大 对称 二叉子树的节点数。

第 7页共 9页

全国信息学奥林匹克联赛( NOIP2018)复赛 普及组
【输入输出样例 1】
tree.in tree.out
2 1
1 3
2 -1
-1 -1

见选手目录下的 tree/tree1.in和 tree/tree1.ans。

【输入输出样例 1说明】

最大的对称二叉子树为 以节点 2 为树根的子树,节点数为 1。

【输入输出样例 2】
tree.in tree.out
10 3
2 2 5 5 5 5 4 4 2 3
9 10
-1 -1
-1 -1
-1 -1
-1 -1
-1 2
3 4
5 6
-1 -1
7 8

见选手目录下的 tree/tree2.in和 tree/tree2.ans。

【输入输出样例 2说明】

第 8页共 9页

全国信息学奥林匹克联赛( NOIP2018)复赛 普及组
最大的对称二叉子树为以节点 7 为树根的子树,节点数为 3。
【输入输出样例 3】
见选手 目录下的 tree/tree3.in和 tree/tree3.ans。

【数据规模与约定】
共 25 个测试点。
???????? ≤ 1000。
测试点 1~3, ???? ≤ 10, 保证 根结点的左子树的所有节点都没有右 孩子,根结点的右
子树的所有节点 都没有左 孩子。
测试点 4~8, ???? ≤ 10。
测试点 9~12, ???? ≤105, 保证输入是一棵 “ 满二叉树 ” 。
测试点 13~16, ???? ≤ 105, 保证输入 是一棵 “ 完全二叉树 ” 。
测试点 17~20, ???? ≤ 105, 保证输入的树的 点权 均 为 1。
测试点 21~25, ???? ≤ 106。

本题约定:
层次 : 节点的层次从根开始定义起,根为第一层,根的孩子为第二层。树中任一节
点的层次等于其 父亲 节点的层次加 1。

树的深度: 树中节点的最大层次称为树的深度。

满二叉树: 设二叉树的深度为 ?,且二叉树有 2? ?1 个节点,这就是满二叉树。


满二叉树 (深度为 3)

完全二叉树: 设二叉树的深度为 ?,除第 ? 层外,其它各层的结点数都达到最大
个数,第 ? 层所有的结点都连续集中在最左边,这就是完全二叉树。


完全二叉树 (深度为 3) 完全二叉树 (深度为 3)
第 9页共 9页
同课章节目录