桂林电子科技大学 ACM 暑假课 | 7 月 23 日 ACM 作业题解
1.A. 找良好数组
题目描述
给你一个数组 a
,下标从 0 开始。
如果数组中的每个奇数下标为奇数,且每个偶数下标为偶数,则称其为“好数组”,否则为“坏数组”。
你可以任意交换两个元素(可以不相邻)。
请你判断是否可以通过最少交换变为好数组,并输出最小交换次数;若无法变成好数组,输出 -1
。
输入
- 第一行一个整数
t
(1 ≤ t ≤ 1000)表示测试用例组数。 - 每组测试用例:
- 第一行一个整数
n
(1 ≤ n ≤ 40)表示数组长度。 - 第二行
n
个整数a0, a1, ..., an−1
(0 ≤ ai ≤ 1000)。
- 第一行一个整数
输出
每组数据输出一个整数:能变为好数组的最小交换次数,或 -1
表示无法实现。
样例输入
1 | 4 |
样例输出
1 | 2 |
2.B. B 进制加法
题目描述
给定一个进制 B
(2 ≤ B ≤ 36),以及两个 B
进制的正整数,求它们的和(结果仍为 B
进制)。
输入
1 | 第1行:进制 B |
输出
一个 B 进制的数,表示两个输入数的和。
样例输入
1 | 4 |
样例输出
1 | 1110 |
3.C. 高精度五则运算
题目描述
输入两个大整数 A 和 B(A, B > 0,长度不超过 10^4),求它们的:和、差、积、商(整除)、余。
输入
1 | A |
输出
五行,依次输出:和、差、积、商、余。
样例输入
1 | 1 |
样例输出
1 | 2 |
4.D. 栈操作
题目描述
三种操作:
p x
:将数字x
压入栈中t
:输出栈顶元素(若栈为空输出no
)d
:删除栈顶元素(若栈为空不操作)
输入
1 | 第一行一个整数 N(1 < N < 200) |
输出
每次 t
操作输出栈顶元素或 no
样例输入
1 | 5 |
样例输出
1 | 1 |
5.E. 队列操作
题目描述
三种操作:
p x
:将数字x
入队t
:输出队首元素(若为空输出no
)d
:删除队首元素(若为空不操作)
输入
1 | 第一行一个整数 N(1 < N < 200) |
输出
每次 t
操作输出队首元素或 no
样例输入
1 | 7 |
样例输出
1 | 1 |
6.F. 采药(完全背包)
题目描述
有 n 株草药,每株采集需要 Ti 时间,价值 Vi,总共时间为 m,求最大价值。
输入
1 | 第一行 t 表示测试组数 |
输出
每组输出一个整数,表示最大价值
样例输入
1 | 1 |
样例输出
1 | 3 |
7.G. 射击游戏(前缀和)
题目描述
有 n
个靶子,每个靶子需要 ai
发子弹,m
次查询,每次给定区间 [L,R]
,求其总子弹数。
输入
1 | 第一行 n(1 < n < 1e5) |
输出
m 行,每行一个整数,表示每次所需子弹数
样例输入
1 | 5 |
样例输出
1 | 3 |
8.H. 二分查找
题目描述
长度为 n
的非降序列,进行 m
次查询,每次查询给出一个整数 q
,输出其首次出现的位置(1-based),否则输出 -1
。
输入
1 | 第一行 n m |
输出
一行,m 个整数,用空格分隔,表示每个查询结果
样例输入
1 | 11 3 |
样例输出
1 | 1 2 -1 |
9.I. 神奇的四次方数(DP)
题目描述
将整数 m
分解为若干个四次方数之和,要求最少项数。
输入
1 | 一行,一个整数 m(1 ≤ m ≤ 100000) |
输出
1 | 最少项数 n |
样例输入
1 | 706 |
样例输出
1 | 2 |
10.J. 栈合法序列个数(卡特兰数)
题目描述
求长度为 2n
的合法出栈序列个数,等价于卡特兰数 C_n
。
输入
1 | 一行一个整数 n(1 ≤ n ≤ 18) |
输出
1 | 合法序列个数 |
样例输入
1 | 3 |
样例输出
1 | 5 |
11.K. FBI 树(分治 + 后序遍历)
题目描述
给定一个长度为 2^n
的“01”字符串,构建 FBI 树并输出其后序遍历。
- 若全是 0,则为
B
; - 若全是 1,则为
I
; - 否则为
F
,其左右子树分别对应前一半和后一半。
输入
1 | 第一行一个整数 n(1 ≤ n ≤ 10) |
输出
1 | 后序遍历字符串 |
样例输入
1 | 3 |
样例输出
1 | IBFBBBFIBFIIIFF |