文章

【GESP】C++ 二级真题解析,[2025年12月,第十二次认证]第二题黄金格

GESP C++ 2025年12月,二级真题第二题,考察循环语句应用,涉及到多重循环,比第一题略难比较简单。题目难度⭐☆☆☆☆。

第二题,黄金格

题目要求

题目描述

黄金格


题目分析

1. 核心逻辑

本题要求在一个 $H \times W$ 的网格中,统计满足特定不等式的格子 $(r, c)$ 数量。核心在于对不等式 $\sqrt{r^2 + c^2} \le x + r - c$ 的处理。

2. 处理技巧:消除根号

在编程中直接使用 sqrt 函数会引入浮点数精度误差,可能导致判断失误。为了保证结果准确,通常将不等式两边进行平方处理。

  • 原式:$\sqrt{r^2 + c^2} \le x + r - c$
  • 平方后:$r^2 + c^2 \le (x + r - c)^2$

3. 注意事项

  • 判定前提:只有当右侧 $x + r - c \ge 0$ 时,两边平方才等价。如果右侧为负数,由于左侧根号结果一定是非负数,该不等式必然不成立。
  • 溢出风险:计算平方值 $r^2$ 或 $(x+r-c)^2$ 时,结果可能超过 int 的范围,因此需要使用 long long 类型进行运算。(当然本题没有)
  • 遍历范围:使用双重循环遍历 $r \in [1, H]$ 和 $c \in [1, W]$ 即可,复杂度为 $O(H \times W)$。


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>

/**
 * GESP 2025年12月 二级编程题 T2: 黄金格
 *
 * 题目核心:
 * 在 H 行 W 列的地图中,统计满足不等式 sqrt(r^2 + c^2) <= x + r - c
 * 的格子数量。
 *
 * 注意点:
 * 1. 坐标 r 和 c 的范围分别是 [1, H] 和 [1, W]。
 * 2. 为了避免 sqrt 带来的浮点数精度误差,我们可以将不等式两边平方进行比较。
 *    平方的前提是不等式右边 (x + r - c) 必须大于等于 0。
 *    因为左边是根号结果(非负),如果右边是负数,则不等式一定不成立。
 */

int main() {
    int h, w, x;
    // 输入 h, w, x 分别占三行
    std::cin >> h >> w >> x;

    int count = 0;
    // 双重循环遍历所有格子 (r, c)
    for (int r = 1; r <= h; r++) {
        for (int c = 1; c <= w; c++) {
            // 计算不等式右边的值
            long long rhs = (long long)x + r - c;

            // 只有当右边 rhs >= 0 时,平方后的比较才有效
            if (rhs >= 0) {
                // 左边平方:r^2 + c^2
                long long left_sq = (long long)r * r + (long long)c * c;
                // 右边平方:(x + r - c)^2
                long long right_sq = rhs * rhs;

                // 比较平方值
                if (left_sq <= right_sq) {
                    count++;
                }
            }
        }
    }

    // 输出满足条件的格子总数
    std::cout << count;

    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP 学习专题站:GESP WIKI

luogu-”系列题目可在洛谷题库进行在线评测。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

欢迎加入Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答

欢迎加入C++ GESP/CSP认证学习QQ频道,考试资源总结汇总

欢迎加入C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
本文由作者按照 CC BY-NC-SA 4.0 进行授权