文章目录
试题 A: 裁纸刀(填空)
本题总分:5 分
【问题描述】
小蓝有一个裁纸刀,每次可以将一张纸沿一条直线裁成两半。
小蓝用一张纸打印出两行三列共 6 个二维码,至少使用九次裁出来,下图给出了一种裁法。
在上面的例子中,小蓝的打印机没办法打印到边缘,所以边缘至少要裁 4次。另外,小蓝每次只能裁一张纸,不能重叠或者拼起来裁。
如果小蓝要用一张纸打印出 20 行 22 列共 440 个二维码,他至少需要裁多少次?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 B: 寻找整数(填空)
本题总分:5 分
【问题描述】
有一个不超过 1017 的正整数 n,知道这个数除以 2 至 49 后的余数如下表所示,求这个正整数最小是多少。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 C: 求和
时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
给定 n 个整数 a1, a2, · · · , an ,求它们两两相乘再相加的和,即
S = a1 · a2 + a1 · a3 + · · · + a1 · an + a2 · a3 + · · · + an−2 · an−1 + an−2 · an + an−1 · an.
【输入格式】
输入的第一行包含一个整数 n 。
第二行包含 n 个整数 a1, a2, · · · an。
【输出格式】
输出一个整数 S,表示所求的和。请使用合适的数据类型进行运算。
【样例输入】
4
1 3 6 9
【样例输出】
117
【评测用例规模与约定】
对于 30% 的数据,1 ≤ n ≤ 1000,1 ≤ ai ≤ 100。
对于所有评测用例,1 ≤ n ≤ 200000,1 ≤ ai ≤ 1000。
试题 D: GCD
时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
给定两个不同的正整数 a, b,求一个正整数 k 使得 gcd(a + k, b + k) 尽可能大,其中 gcd(a, b) 表示 a 和 b 的最大公约数,如果存在多个 k,请输出所有满足条件的 k 中最小的那个。
【输入格式】
输入一行包含两个正整数 a, b,用一个空格分隔。
【输出格式】
输出一行包含一个正整数 k。
【样例输入】
5 7
【样例输出】
1
【评测用例规模与约定】
对于 20% 的评测用例,a < b ≤ 10的5次方 ;
对于 40% 的评测用例,a < b ≤ 10的9次方 ;
对于所有评测用例,1 ≤ a < b ≤ 10的18次方 。
试题 E: 蜂巢
时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分
【问题描述】
蜂巢由大量的六边形拼接而成,定义蜂巢中的方向为:0 表示正西方向,1表示西偏北 60◦,2 表示东偏北 60◦,3 表示正东,4 表示东偏南 60◦,5 表示西偏南 60◦。
对于给定的一点 O,我们以 O 为原点定义坐标系,如果一个点 A 由 O 点先向 d 方向走 p 步再向 (d + 2) mod 6 方向(d 的顺时针 120◦ 方向)走 q 步到达,则这个点的坐标定义为 (d, p, q)。在蜂窝中,一个点的坐标可能有多种。
下图给出了点 B(0, 5, 3) 和点 C(2, 3, 2) 的示意。
给定点 (d1, p1, q1) 和点 (d2, p2, q2),请问他们之间最少走多少步可以到达?
【输入格式】
输入一行包含 6 个整数 d1, p1, q1, d2, p2, q2 表示两个点的坐标,相邻两个整
数之间使用一个空格分隔。
【输出格式】
输出一行包含一个整数表示两点之间最少走多少步可以到达。
【样例输入】
0 5 3 2 3 2
【样例输出】
7
【评测用例规模与约定】
对于 25% 的评测用例,p1, p2 ≤ 10的3次方 ;
对于 50% 的评测用例,p1, p2 ≤ 10的5次方 ;
对于 75% 的评测用例,p1, p2 ≤ 10的7次方 ;
对于所有评测用例,0 ≤ d1, d2 ≤ 5,0 ≤ q1 < p1 ≤ 10的9次方,0 ≤ q2 < p2 ≤ 10的9次方 。
试题 F: 全排列的价值
时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分
【问题描述】
对于一个排列 A = (a1, a2, · · · , an),定义价值 ci 为 a1 至 ai−1 中小于 ai 的数的个数,即 ci = |{aj| j < i, aj < ai}|。定义 A 的价值为 ∑ci(i从1到n)。
给定 n,求 1 至 n 的全排列中所有排列的价值之和。
【输入格式】
输入一行包含一个整数 n 。
【输出格式】
输出一行包含一个整数表示答案,由于所有排列的价值之和可能很大,请输出这个数除以 998244353 的余数。
【样例输入 1】
3
【样例输出 1】
9
【样例输入 2】
2022
【样例输出 2】
593300958
【样例说明】
1 至 3 构成的所有排列的价值如下:
(1, 2, 3) : 0 + 1 + 2 = 3 ;
(1, 3, 2) : 0 + 1 + 1 = 2 ;
(2, 1, 3) : 0 + 0 + 2 = 2 ;
(2, 3, 1) : 0 + 1 + 0 = 1 ;
(3, 1, 2) : 0 + 0 + 1 = 1 ;
(3, 2, 1) : 0 + 0 + 0 = 0 ;
故总和为 3 + 2 + 2 + 1 + 1 = 9。
【评测用例规模与约定】
对于 40% 的评测用例,n ≤ 20 ;
对于 70% 的评测用例,n ≤ 5000 ;
对于所有评测用例,2 ≤ n ≤ 10的6次方 。
试题 G: 青蛙过河
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】
小青蛙住在一条河边,它想到河对岸的学校去学习。小青蛙打算经过河里的石头跳到对岸。
河里的石头排成了一条直线,小青蛙每次跳跃必须落在一块石头或者岸上。不过,每块石头有一个高度,每次小青蛙从一块石头起跳,这块石头的高度就会下降 1,当石头的高度下降到 0 时小青蛙不能再跳到这块石头上(某次跳跃后使石头高度下降到 0 是允许的)。
小青蛙一共需要去学校上 x 天课,所以它需要往返 2x 次。当小青蛙具有一个跳跃能力 y 时,它能跳不超过 y 的距离。
请问小青蛙的跳跃能力至少是多少才能用这些石头上完 x 次课。
【输入格式】
输入的第一行包含两个整数 n, x,分别表示河的宽度和小青蛙需要去学校的天数。请注意 2x 才是实际过河的次数。
第二行包含 n − 1 个非负整数 H1, H2, · · · , Hn−1,其中 Hi > 0 表示在河中与小青蛙的家相距 i 的地方有一块高度为 Hi 的石头,Hi = 0 表示这个位置没有石头。
【输出格式】
输出一行,包含一个整数,表示小青蛙需要的最低跳跃能力。
【样例输入】
5 1
1 0 1 0
【样例输出】
4
【样例解释】
由于只有两块高度为 1 的石头,所以往返只能各用一块。第 1 块石头和对岸的距离为 4,如果小青蛙的跳跃能力为 3 则无法满足要求。所以小青蛙最少需要 4 的跳跃能力。
【评测用例规模与约定】
对于 30% 的评测用例,n ≤ 100;
对于 60% 的评测用例,n ≤ 1000;
对于所有评测用例,1 ≤ n ≤ 10的5次方, 1 ≤ x ≤ 10的9次方, 1 ≤ Hi ≤ 10的4次方。
试题 H: 因数平方和
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】
记 f(x) 为 x 的所有因数的平方的和。例如:f(12) = 12 + 22 + 32 + 42 + 62 +122。
定义 g(n) = ∑f(i)(i从1到n) 。给定 n, 求 g(n) 除以 109 + 7 的余数。
【输入格式】
输入一行包含一个正整数 n。
【输出格式】
输出一个整数表示答案 g(n) 除以 109 + 7 的余数。
【样例输入】
100000
【样例输出】
394827960 (该案例给的错误)
【评测用例规模与约定】
对于 20% 的评测用例,n ≤ 10的5次方。
对于 30% 的评测用例,n ≤ 10的7次方。
对于所有评测用例,1 ≤ n ≤ 10的9次方。
试题 I: 最优清零方案
时间限制: 3.0s 内存限制: 512.0MB 本题总分:25 分
【问题描述】
给定一个长度为 N 的数列 A1, A2, · · · , AN。现在小蓝想通过若干次操作将这个数列中每个数字清零。
每次操作小蓝可以选择以下两种之一:
①选择一个大于 0 的整数,将它减去 1;
②选择连续 K 个大于 0 的整数,将它们各减去 1。
小蓝最少经过几次操作可以将整个数列清零?
【输入格式】
输入第一行包含两个整数 N 和 K。
第二行包含 N 个整数 A1, A2, · · · , AN。
【输出格式】
输出一个整数表示答案。
【样例输入】
4 2
1 2 3 4
【样例输出】
6
【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ K ≤ N ≤ 10。
对于 40% 的评测用例,1 ≤ K ≤ N ≤ 100。
对于 50% 的评测用例,1 ≤ K ≤ N ≤ 1000。
对于 60% 的评测用例,1 ≤ K ≤ N ≤ 10000。
对于 70% 的评测用例,1 ≤ K ≤ N ≤ 100000。
对于所有评测用例,1 ≤ K ≤ N ≤ 1000000, 0 ≤ Ai ≤ 1000000。
试题 J: 推导部分和
时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分
【问题描述】
对于一个长度为 N 的整数数列 A1, A2, · · · AN,小蓝想知道下标 l 到 r 的部分和 Al + Al+1 + · · · + Ar是多少?
然而,小蓝并不知道数列中每个数的值是多少,他只知道它的 M 个部分和的值。其中第 i 个部分和是下标 li 到 ri 的部分和Ali + Ali+1 + · · · + Ari ,值是 S i。
【输入格式】
第一行包含 3 个整数 N、M 和 Q。分别代表数组长度、已知的部分和数量和询问的部分和数量。
接下来 M 行,每行包含 3 个整数 li, ri, S i。
接下来 Q 行,每行包含 2 个整数 l 和 r ,代表一个小蓝想知道的部分和。
【输出格式】
对于每个询问,输出一行包含一个整数表示答案。如果答案无法确定,输出 UNKNOWN。
【样例输入】
5 3 3
1 5 15
4 5 9
2 3 5
1 5
1 3
1 2
【样例输出】
15
6
UNKNOWN
【评测用例规模与约定】
对于 10% 的评测用例,1 ≤ N, M, Q ≤ 10,−100 ≤ S i ≤ 100。
对于 20% 的评测用例,1 ≤ N, M, Q ≤ 20,−1000 ≤ S i ≤ 1000。
对于 30% 的评测用例,1 ≤ N, M, Q ≤ 50,−10000 ≤ S i ≤ 10000。
对于 40% 的评测用例,1 ≤ N, M, Q ≤ 1000,−10的6次方 ≤ S i ≤ 10的6次方。
对于 60% 的评测用例,1 ≤ N, M, Q ≤ 10000,−10的9次方 ≤ S i ≤ 10的9次方。
对于所有评测用例,1 ≤ N, M, Q ≤ 10的5次方,−10的12次方 ≤ S i ≤ 10的12次方,1 ≤ li ≤ ri ≤ N,1 ≤ l ≤ r ≤ N。数据保证没有矛盾。