CCF GESP 2024年9月认证 C++ 8级

编程题
共 2 道 每题 25 分 共计 50 分
第 1 题
手套配对
时间限制:1s 内存限制:512MB

题目描述

小杨有 $n$ 对不同的手套,每对手套由左右各一只组成。

小杨想知道从中取出 $m$ 只手套,$m$ 只手套恰好包含 $k$ 对手套的情况有多少种。

小杨认为两种取出的情况不同,当且仅当两种情况取出的手套中存在不同的手套(同一对手套的左右手也视为不同的手套)。

输入格式

第一行包含一个正整数 $t$,代表测试用例组数。

接下来是 $t$ 组测试用例。对于每组测试用例,一共一行。

第一行包含三个正整数 $n,m,k$,代表手套数量,取出的手套数和目标对数。

输出格式

对于每组测试数据,输出一个整数,代表可能的情况数量对 $10^9+7$ 取模的结果。

样例说明

样例 1

输入:
2
5 6 2
5 1 5
输出:
120
0

数据范围

对全部的测试数据,保证 $1 \leq t \leq 10^5,1 \leq n \leq 1000,1 \leq m \leq 2 \times n,1 \leq k \leq n$。

第 2 题
美丽路径
时间限制:1s 内存限制:512MB

题目描述

小杨有一棵包含 $n$ 个节点的树,节点从 $1$ 到 $n$ 编号,并且每个节点要么是白色,要么是黑色。

对于树上的一条简单路径(不经过重复节点的路径),小杨认为它是美丽的当且仅当路径上相邻节点的颜色均不相同。例如下图,其中节点 $1$ 和节点 $4$ 是黑色,其余节点是白色,路径 $2-1-3-4$ 是美丽路径,而路径 $2-1-3-5$ 不是美丽路径(相邻节点 $3$ 和 $5$ 颜色相同)。

对于树上的一条简单路径,小杨认为它的长度是路径包含节点的数量。小杨想知道最长的美丽路径的长度是多少。

输入格式

第一行包含一个正整数 $n$,代表节点数量。

第二行包含 $n$ 个整数 $c_1,c_2,\dots,c_n$,代表每个节点的颜色,如果 $c_i=0$,代表节点 $i$ 为白色,如果 $c_i=1$,代表节点 $i$ 为黑色。

之后 $n-1$ 行,每行包含两个正整数 $u_i,v_i$,代表存在一条连接节点 $u_i$ 和节点 $v_i$ 的边。

输出格式

输出一个整数,代表最长美丽路径的长度。

样例说明

样例 1

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

样例 2

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

数据范围

对于全部数据,保证有 $1 \leq n \leq 10^5,0 \leq c_i \leq 1$,同时保证给出的数据构成一棵树。

编程题部分已到底了。