CCF GESP 2026年6月认证 C++ 6级

编程题
共 2 道 每题 25 分 共计 50 分
第 1 题
条形蛋糕
时间限制:1s 内存限制:512MB

题目描述

寒假到了,小杨同学打算找一份兼职,顺便体验一下打工人的生活。

小杨同学给一家蛋糕店发送了一份自己的简历,希望可以在寒假来这里帮忙。店长最近正好遇到了一个难题:店里每天会做一条长条蛋糕,但是不同长度的蛋糕块卖出的价格不同,应该怎么分才能卖得最多呢?

有趣的是店长曾经学习过计算机专业。他最近对动态规划算法很感兴趣,于是打算用这个问题考一考小杨同学,问题如下:

  • 给定一条长度为 $n$ 的长条蛋糕和一个价格表,该价格表表示长度为 $i$ ($i=1,2,…,n$) 的蛋糕块的价格为 $p_{i}$。求蛋糕的分割方案,使得总销售价格最大,注意蛋糕块的长度必须为整数

输入格式

第一行一个正整数 $n$ ($1≤n≤10^{3}$),表示长条蛋糕的总长度。

第二行 $n$ 个正整数 $p_{1},p_{2},…,p_{n}$ ($1≤p_{i}≤10^{5}$),表示不同长度蛋糕块的价格。

输出格式

一行一个正整数,表示最大总销售价格。

样例说明

样例 1

输入:
4
1 5 8 9
输出:
10
样例解释:

第一个样例中,长度为1的蛋糕价值为1,长度为2的蛋糕价值为5,长度为3的蛋糕价值为8,长度为4的蛋糕价值为9;

总长度为4的长条蛋糕,有{4},{1,3},{2,2},{1,1,2},{1,1,1,1}五种本质不同的分法。

其对应的总销售价格分别为9,9,10,7,4,故最大总销售价格为10。

样例 2

输入:
10
1 5 8 9 10 17 17 20 24 30
输出:
30
样例解释:

第二个样例中,长度为10的长条蛋糕,销售价格最大的分法为{10},最大总销售价格为30。

第 2 题
满二叉树
时间限制:1s 内存限制:512MB

题目描述

给定一棵包含 $n$ 个结点的有根二叉树,结点依次以 $1,2,…,n$ 编号,根结点编号为 1。

对于结点 $i$,其左儿子的编号记为 $l_{i}$,右儿子编号记为 $r_{i}$。特别地,如果左儿子不存在则 $l_{i}=0$,如果右儿子不存在则 $r_{i}=0$。

树中每个结点都对应一棵以其为根的子树。请你求出给定有根树的所有 $n$ 棵子树中,有多少棵子树是满二叉树。

满二叉树是指所有叶子深度均相同,且除叶子外均有两个儿子的二叉树,例如以下三棵二叉树均是满二叉树:

()   ()        ()
    /  \      /  \
   ()  ()   ()    ()
           /  \  /  \
          ()  ()()  ()

例如,

   ()
  /  \
()    ()

在上面这棵有 3 个节点的二叉树中,有 3 个子树是满二叉树(包括整个树本身,及所有的单个叶子节点);

又例如,

   (1)
   / \
 (2) (3)
     / \
   (4) (5)

在上面这棵有 5 个节点的二叉树中,有 4 个子树是满二叉树(包括节点 3 的子树,以及所有单个叶子节点)。

输入格式

第一行,一个正整数 $n$,表示有根二叉树结点数量。

接下来 $n$ 行,每行两个非负整数 $l_{i},r_{i}$,表示结点 $i$ 的左儿子编号和右儿子编号,整数之间以空格分隔。

输出格式

输出一行,一个整数,表示所有子树中满二叉树的数量。

样例说明

样例 1

输入:
4
2 3
4 0
0 0
0 0
输出:
2

样例 2

输入:
3
2 3
0 0
0 0
输出:
3

数据范围

对于 40% 的测试点,保证 $1≤n≤500$。

对于所有测试点,保证 $1≤n≤10^{5}$。

编程题部分已到底了。