2021年蓝桥杯 C++ A组 赛题 题目

第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
第十二届蓝桥杯大赛软件赛省赛
C/C++ 大学 A 组

试题 A: 卡片
本题总分:5 分
【问题描述】
小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。
小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,
就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,
但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1
拼到多少?
提示:建议使用计算机编程解决问题。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 A: 卡片 2
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
试题 B: 直线
本题总分:5 分
【问题描述】
在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上,
那么这些点中任意两点确定的直线是同一条。
给定平面上 2 × 3 个整点 {(x, y)|0 ≤ x < 2, 0 ≤ y < 3, x ∈ Z, y ∈ Z},即横坐标
是 0 到 1 (包含 0 和 1) 之间的整数、纵坐标是 0 到 2 (包含 0 和 2) 之间的整数
的点。这些点一共确定了 11 条不同的直线。
给定平面上 20 × 21 个整点 {(x, y)|0 ≤ x < 20, 0 ≤ y < 21, x ∈ Z, y ∈ Z},即横
坐标是 0 到 19 (包含 0 和 19) 之间的整数、纵坐标是 0 到 20 (包含 0 和 20) 之
间的整数的点。请问这些点一共确定了多少条不同的直线。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 B: 直线 3
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
试题 C: 货物摆放
本题总分:10 分
【问题描述】
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有 n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝
规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、
宽、高。
小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上
分别堆 L、W、H 的货物,满足 n = L × W × H。
给定 n,请问有多少种堆放货物的方案满足要求。
例如,当 n = 4 时,有以下 6 种方案:1×1×4、1×2×2、1×4×1、2×1×2、 2 × 2 × 1、4 × 1 × 1。
请问,当 n = 2021041820210418 (注意有 16 位数字)时,总共有多少种
方案?
提示:建议使用计算机编程解决问题。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 C: 货物摆放 4
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
试题 D: 路径
本题总分:10 分
【问题描述】
小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图
中的最短路径。
小蓝的图由 2021 个结点组成,依次编号 1 至 2021。
对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点
之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条
长度为 a 和 b 的最小公倍数的无向边相连。
例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无
向边,长度为 24;结点 15 和结点 25 之间有一条无向边,长度为 75。
请计算,结点 1 和结点 2021 之间的最短路径长度是多少。
提示:建议使用计算机编程解决问题。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

试题 E: 回路计数
本题总分:15 分
【问题描述】
蓝桥学院由 21 栋教学楼组成,教学楼编号 1 到 21。对于两栋教学楼 a 和 b,当 a 和 b 互质时,a 和 b 之间有一条走廊直接相连,两个方向皆可通行,否
则没有直接连接的走廊。
小蓝现在在第一栋教学楼,他想要访问每栋教学楼正好一次,最终回到第
一栋教学楼(即走一条哈密尔顿回路),请问他有多少种不同的访问方案?两个
访问方案不同是指存在某个 i,小蓝在两个访问方法中访问完教学楼 i 后访问了
不同的教学楼。
提示:建议使用计算机编程解决问题。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 E: 回路计数 6
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
试题 F: 砝码称重
时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分
【问题描述】
你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1, W2, · · · , WN。
请你计算一共可以称出多少种不同的重量?
注意砝码可以放在天平两边。
【输入格式】
输入的第一行包含一个整数 N。
第二行包含 N 个整数:W1, W2, W3, · · · , WN。
【输出格式】
输出一个整数代表答案。
【样例输入】
3
1 4 6
【样例输出】
10
【样例说明】
能称出的 10 种重量是:1、2、3、4、5、6、7、9、10、11。
1 = 1;
2 = 6 6 4 (天平一边放 6,另一边放 4);
3 = 4 4 1;
试题 F: 砝码称重 7
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
4 = 4;
5 = 6 6 1;
6 = 6;
7 = 1 + 6;
9 = 4 + 6 6 1;
10 = 4 + 6;
11 = 1 + 4 + 6。
【评测用例规模与约定】
对于 50% 的评测用例,1 ≤ N ≤ 15。
对于所有评测用例,1 ≤ N ≤ 100,N 个砝码总重不超过 100000。
试题 F: 砝码称重 8
第十二届蓝桥杯大赛软件赛省赛C/C++大学A组
试题 G: 异或数列
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
【问题描述】
Alice 和 Bob 正在玩一个异或数列的游戏。初始时,Alice 和 Bob 分别有一
个整数 a 和 b,有一个给定的长度为 n 的公共数列 X1, X2, · · · , Xn。
Alice 和 Bob 轮流操作,Alice 先手,每步可以在以下两种选项中选一种:
选项 1:从数列中选一个 Xi 给 Alice 的数异或上,或者说令 a 变为 a ⊕ Xi。(其中 ⊕ 表示按位异或)
选项 2:从数列中选一个 Xi 给 Bob 的数异或上,或者说令 b 变为 b ⊕ Xi。
每个数 Xi 都只能用一次,当所有 Xi 均被使用后(n 轮后)游戏结束。游
戏结束时,拥有的数比较大的一方获胜,如果双方数值相同,即为平手。
现在双方都足够聪明,都采用最优策略,请问谁能获胜?
【输入格式】
每个评测用例包含多组询问。询问之间彼此独立。
输入的第一行包含一个整数 T,表示询问数。
接下来 T 行每行包含一组询问。其中第 i 行的第一个整数 ni 表示数列长
度,随后 ni 个整数 X1, X2, · · · , Xni 表示数列中的每个数。
【输出格式】
输出 T 行,依次对应每组询问的答案。
每行包含一个整数 1、0 或 ᡆ1 分别表示 Alice 胜、平局或败。
【样例输入】
4
1 1
1 0
试题G: 异或数列 9
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
2 2 1
7 992438 1006399 781139 985280 4729 872779 563580
【样例输出】
1011
【评测用例规模与约定】
对于所有评测用例,1 ≤ T ≤ 200000,1 ≤ ∑Ti=1 ni ≤ 200000,0 ≤ Xi < 2
20。
试题 G: 异或数列 10
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
试题 H: 左孩子右兄弟
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
【问题描述】
对于一棵多叉树,我们可以通过 “左孩子右兄弟” 表示法,将其转化成一棵
二叉树。
如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一。
换句话说,每个结点可以选任意子结点作为左孩子,并按任意顺序连接右兄弟。
给定一棵包含 N 个结点的多叉树,结点从 1 至 N 编号,其中 1 号结点是
根,每个结点的父结点的编号比自己的编号小。请你计算其通过 “左孩子右兄
弟” 表示法转化成的二叉树,高度最高是多少。注:只有根结点这一个结点的
树高度为 0 。
例如如下的多叉树:
可能有以下 3 种 (这里只列出 3 种,并不是全部) 不同的 “左孩子右兄弟”
表示:
试题 H: 左孩子右兄弟 11
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
其中最后一种高度最高,为 4。
【输入格式】
输入的第一行包含一个整数 N。
以下 N N1 行,每行包含一个整数,依次表示 2 至 N 号结点的父结点编号。
【输出格式】
输出一个整数表示答案。
【样例输入】
51112
【样例输出】
4
试题 H: 左孩子右兄弟 12
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ N ≤ 20;
对于所有评测用例,1 ≤ N ≤ 100000。
试题 H: 左孩子右兄弟 13
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
试题 I: 括号序列
时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分
【问题描述】
给定一个括号序列,要求尽可能少地添加若干括号使得括号序列变得合法,
当添加完成后,会产生不同的添加结果,请问有多少种本质不同的添加结果。
两个结果是本质不同的是指存在某个位置一个结果是左括号,而另一个是右括
号。
例如,对于括号序列 (((),只需要添加两个括号就能让其合法,有以下几
种不同的添加结果:()()()、()(())、(())()、(()()) 和 ((()))。
【输入格式】
输入一行包含一个字符串 s,表示给定的括号序列,序列中只有左括号和
右括号。
【输出格式】
输出一个整数表示答案,答案可能很大,请输出答案除以 1000000007 (即
109 + 7) 的余数。
【样例输入】
((()
【样例输出】
5
【评测用例规模与约定】
对于 40% 的评测用例,|s| ≤ 200。
对于所有评测用例,1 ≤ |s| ≤ 5000。
试题 I: 括号序列 14
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
试题 J: 分果果
时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分
【问题描述】
小蓝要在自己的生日宴会上将 n 包糖果分给 m 个小朋友。每包糖果都要分
出去,每个小朋友至少要分一包,也可以分多包。
小蓝已经提前将糖果准备好了,为了在宴会当天能把糖果分得更平均一些,
小蓝要先计算好分配方案。
小蓝将糖果从 1 到 n 编号,第 i 包糖果重 wi。小朋友从 1 到 m 编号。每个
小朋友只能分到编号连续的糖果。小蓝想了很久没想出合适的分配方案使得每
个小朋友分到的糖果差不多重。因此需要你帮他一起想办法。为了更好的分配
糖果,他可以再买一些糖果,让某一些编号的糖果有两份。当某个编号的糖果
有两份时,一个小朋友最多只能分其中的一份。
请找一个方案,使得小朋友分到的糖果的最大重量和最小重量的差最小,
请输出这个差。
例如,小蓝现在有 5 包糖果,重量分别为 6, 1, 2, 7, 9,如果小蓝要分给两
个小朋友,则他可以将所有糖果再买一份,两个小朋友都分到 1 至 5 包糖果,
重量都是 25,差为 0。
再如,小蓝现在有 5 包糖果,重量分别为 6, 1, 2, 7, 9,如果小蓝要分给三
个小朋友,则他可以将第 3 包糖果再买一份,第一个小朋友分 1 至 3 包,第二
个小朋友分 3 至 4 包,第三个小朋友分第 5 包,每个小朋友分到的重量都是 9,
差为 0。
再如,小蓝现在有 5 包糖果,重量分别为 6, 1, 2, 7, 9,如果小蓝要分给四
个小朋友,则他可以将第 3 包和第 5 包糖果再买一份,仍然可以每个小朋友分
到的重量都是 9,差为 0。
再如,小蓝现在有 5 包糖果,重量分别为 6, 1, 2, 7, 9,如果小蓝要分给五
个小朋友,则他可以将第 4 包和第 5 包糖果再买一份,第一个小朋友分第 1 至 2 包重量为 7,第二个小朋友分第 3 至 4 包重量为 9,第三个小朋友分第 4 包重
试题 J: 分果果 15
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组
量为 7,第四个和第五个小朋友都分第 5 包重量为 9。差为 2。
【输入格式】
输入第一行包含两个整数 n 和 m,分别表示糖果包数和小朋友数量。
第二行包含 n 个整数 w1, w2, · · · , wn,表示每包糖果的重量。
【输出格式】
输出一个整数,表示在最优情况下小朋友分到的糖果的最大重量和最小重
量的差。
【样例输入 1】
5 2
6 1 2 7 9
【样例输出 1】 0
【样例输入 2】
5 5
6 1 2 7 9
【样例输出 2】 2
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ n ≤ 10,1 ≤ m ≤ 10,1 ≤ wi ≤ 10;
对于 60% 的评测用例,1 ≤ n ≤ 30,1 ≤ m ≤ 20,1 ≤ wi ≤ 30;
对于所有评测用例,1 ≤ n ≤ 100,1 ≤ m ≤ 50,1 ≤ wi ≤ 100。在评测数据
中,wi 随机生成,在某个区间均匀分布。
试题 J: 分果果 16

你可能感兴趣的:(2021年蓝桥杯 C++ A组 赛题 题目)