GESP-2025.03-1-T1
考察对顺序结构的简单运用。
这里我们需要用到一个知识点:向上取整。
要求 n / m
的向上取整值,我们可以使用 ceil((double)n / m)
。但这样很容易引起精度问题。所以我们可以使用 (n + m - 1) / m
解决。
回到本题,可以发现啃的本数为 n - ceil(y / x)
。也就是 n - (x + y - 1) / x
。
直接套公式计算即可。
GESP-2025.03-1-T2
考察对分支、循环结构的简单运用。
我们先回顾一下如何获取一个数的个位。一个数的个位就是这个数对 10 取模后的值。按照这个想法,我们可以先判断个位的大小,再进行计算。
回到本题,可以先判断个位的大小,再进行四舍五入的操作。对于“舍”的操作,可以用原数减去个位;对于“入”的操作,可以用原数加上个位。
本题也存在不使用分支结构方法,留作扩展。
GESP-2025.03-2-T1
考察对循环结构的简单运用。
首先我们发现,再第 n 行 m 列填入 n\times m 即可。为什么呢?因为对于行来说,相邻两项的差为 n\times m - n\times (m-1)=n,是个定值;对于列来说,相邻两项的差为 n\times m - (n-1)\times m=m,也是个定值。
直接模拟即可,码量较小,与 T2 形成鲜明对比。
GESP-2025.03-2-T2
考察对分支结构的灵活运用与选手对长代码的处理能力。
题目非常友好,k 的数据范围只到了 24,不存在跨多天,多月,多年等情况,所以在处理时仅需简单相减。
其余处理细节见核心代码:
if (h >= 24){ // 超过 24 小时。
h -= 24, d++; // 由于 k 的数据范围不超过 24,所以仅需简单相减即可。
bool f = 0; // 标记是否为闰年(0:不是,1:是)。
if (y % 4 == 0 && y % 100 != 0) f = 1;
if (y % 400 == 0) f = 1;
int t; // 记录该月的天数。
if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) t = 31; // 大月
if (m == 4 || m == 6 || m == 9 || m == 11) t = 30; // 小月
if (m == 2) t = 28 + f; // 平月
if (d > t) { // 超过该月应有的天数。
d -= t; // 直接相减即可。
m++;
if (m > 12) { // 超过 12 个月。
m -= 12; // 直接相减即可。
y++;
}
}
}
GESP-2025.3-3-T1
考察选手的逻辑推理能力。
首先我们要确定枚举范围。对于任意正整数 x,y,有 (x \operatorname{and} y) + (x \operatorname{or} y)=x+y。考察拆位证明:
x | y | (x \operatorname{and} y) + (x \operatorname{or} y) | x+y |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 10 | 10 |
所以答案为 2025-x。
GESP-2025.3-3-T2
考察对 STL 容器、字符串入门操作的简单运用。
把所有的字符串变为小写,再扔进 map
中,对其进行次数比较。
GESP-2025.3-4-T1
考察数组的综合运用以及选手对长代码的处理能力。
考虑新开一个数组 \text{cnt},去掉该位置上的障碍物后能增加的答案。若该位置周围有障碍物,则将这个障碍物上的 \text{cnt} 自增。如果该位置本身就为障碍物,那么这个位置上的 \text{cnt} 自增。最后统计有多少个位置是本身就可以被开垦的(记为 \text{ans} ),再计算 \text{ans}+\max\{\text{cnt}\}。
GESP-2025.3-4-T2
考察对枚举的简单运用。
很显然,只需暴力枚举 2\times2 的子矩阵,再相乘即可。
GESP-2025.3-5-T1
考察对排序、贪心的简单运用。
首先我们考虑全卖给 B。然后将其中的 n 件物品转给 C。若选第 i 件物品,则对答案的贡献为 c_i-b_i。而我们的目的是将答案最大化,只需要选择最大的 n 个 c_i-b_i 即可。可以通过排序实现。
最后计算 b 数组的和加上最大的 n 个 c_i-b_i 即可。
GESP-2025.3-5-T2
不想讲。
GESP-2025.3-6-T1
咕咕咕。