CCF GESP 2026年3月认证 C++ 6级
三
编程题
第 1 题
选数
题目描述
给定两个包含 n 个整数的数组 $a=[a_1,…,a_n]$ 与 $b=[b_1,…,b_n]$。你需要指定若干下标 $p_1<⋯<p_k(1≤k≤n)$ 使得以下条件成立:
- $1≤p_i≤n(1≤i≤k)$;
- $p_{i+1}≥p_i+b_{p_i} (1≤i<k)$。
你需要在满足以上条件的前提下最大化 $ \sum_{i=1}^k a_{p_i}$,也即最大化数组 a 对应下标的整数之和。
输入格式
第一行,一个正整数 n,表示数组长度。
第二行,n 个正整数 $a_1,a_2,…,a_n$,表示数组 a。
第三行,n 个正整数 $b_1,b_2,…,b_n$,表示数组 b。
输出格式
一行,一个整数,表示在满足下标条件的前提下,数组 a 对应下标的整数之和的最大值。
样例说明
样例 1
输入:
4
1 2 3 4
3 3 1 1
输出:
7
样例 2
输入:
6
1 1 4 5 1 4
1 2 3 2 1 0
输出:
11
数据范围
对于 40% 的测试点,保证 $2≤n≤10^3$。
对于所有测试点,保证 $2≤n≤10^5,0≤a_i≤10^9,0≤b_i≤n$。
第 2 题
完全二叉树
题目描述
给定一棵包含 n 个结点的有根二叉树,结点依次以 $1,2,…,n$ 编号,根结点编号为 1。
对于结点 i,其左儿子的编号记为 $l_i$,右儿子编号记为 $r_i$。特别地,如果左儿子不存在则 $l_i=0$,如果右儿子不存在则 $r_i=0$。
树中每个结点都对应一棵以其为根的子树。请你求出给定有根树的所有 n 棵子树中,有多少棵子树是完全二叉树。
输入格式
第一行,一个正整数 n,表示有根二叉树结点数量。
接下来 n 行,每行两个正整数 $l_i,r_i$,表示结点 i 的左儿子编号和右儿子编号。
输出格式
输出一行,一个整数,表示所有子树中完全二叉树的数量。
样例说明
样例 1
输入:
4
2 3
4 0
0 0
0 0
输出:
4
样例 2
输入:
4
2 3
0 0
4 0
0 0
输出:
3
数据范围
对于 40% 的测试点,保证 $1≤n≤500$。
对于所有测试点,保证 $1≤n≤10^5$。
编程题部分已到底了。