2025年12月GESP(C++二级): 黄金格

题目描述
小杨在探险时发现了一张神奇的矩形地图,地图有 H H H 行和 W W W 列。每个格子的坐标是 ( r , c ) (r, c) (r,c),其中 r r r 表示行号从 1 1 1 到 H H H, c c c 表示列号 1 1 1 到 W W W。
小杨听说地图中隐藏着一些"黄金格",这些格子满足一个神秘的数学挑战:当格子坐标 ( r , c ) (r, c) (r,c) 代入特定的不等式关系成立时,该格子就是黄金格。具体来说,黄金格的条件是: r 2 + c 2 ≤ x + r − c \sqrt{r^2 + c^2} \leq x + r - c r2+c2 ≤x+r−c。
例如,如果参数 x = 5 x = 5 x=5,那么格子 ( 4 , 3 ) (4, 3) (4,3) 就是黄金格。因为左边坐标平方和的平方根 4 2 + 3 2 \sqrt{4^2 + 3^2} 42+32 算出来是 5 5 5,而右边 5 + 4 − 3 5 + 4 - 3 5+4−3 算出来是 6 6 6, 5 5 5 小于等于 6 6 6,符合条件。
输入格式
三行,每行一个正整数,分别表示 H , W , x H,W,x H,W,x。含义如题面所示。
输出格式
一行一个整数,代表黄金格数量。
输入输出样例 1
输入 1
4
4
2
输出 1
4
说明/提示
样例解释

图中标注为黄色的四个格子是黄金格,坐标分别为 ( 1 , 1 ) (1, 1) (1,1), ( 2 , 1 ) (2, 1) (2,1), ( 3 , 1 ) (3, 1) (3,1), ( 4 , 1 ) (4, 1) (4,1)。
数据范围
对于所有测试点,保证给出的正整数不超过 1000 1000 1000。
思路分析
这道题的核心是判断每个格子是否满足条件: r 2 + c 2 ≤ x + r − c \sqrt{r^2 + c^2} \leq x + r - c r2+c2 ≤x+r−c
解题要点:
- 需要遍历地图上的所有格子,即 H × W H \times W H×W 个格子
- 对每个格子计算:
- 左边: r 2 + c 2 \sqrt{r^2 + c^2} r2+c2 (欧几里得距离)
- 右边: x + r − c x + r - c x+r−c
- 比较两边大小
- 注意数据范围: H , W , x H, W, x H,W,x 都不超过1000,最坏情况需要计算 10 6 10^6 106 次,完全可以接受
代码实现
cpp
#include<bits/stdc++.h>
using namespace std;
int h, w, x, cnt = 0; // h:行数,w:列数,x:参数,cnt:计数器
int main() {
// 读取输入
cin >> h >> w >> x;
// 遍历所有格子
for(int r = 1; r <= h; r++) {
for(int c = 1; c <= w; c++) {
// 判断条件是否成立
// sqrt(r*r + c*c) <= x + r - c
if(sqrt(r * r + c * c) <= x + r - c) {
cnt++; // 计数器加1
}
}
}
// 输出结果
cout << cnt;
return 0;
}
功能分析
1. 输入处理
- 读取三个整数:地图行数 H H H、列数 W W W 和参数 x x x
- 存储在变量
h,w,x中
2. 遍历与判断
- 使用双重循环遍历所有坐标 ( r , c ) (r, c) (r,c)
- 对每个格子计算不等式两边:
- 左边 : r 2 + c 2 \sqrt{r^2 + c^2} r2+c2 ,即从原点(0,0)到点(r,c)的欧几里得距离
- 右边 : x + r − c x + r - c x+r−c,由参数x和坐标计算得到
- 判断不等式是否成立
3. 计数与输出
- 使用计数器
cnt记录满足条件的格子数量 - 最后输出计数结果
4. 算法复杂度
- 时间复杂度 : O ( H × W ) O(H \times W) O(H×W)
- 最坏情况: 1000 × 1000 = 10 6 1000 \times 1000 = 10^6 1000×1000=106 次循环
- 每次循环包含一次平方根计算和一些简单运算
- 空间复杂度 : O ( 1 ) O(1) O(1),只使用了几个变量
各种学习资料,助力大家一站式学习和提升!!!
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"########## 一站式掌握信奥赛知识! ##########";
cout<<"############# 冲刺信奥赛拿奖! #############";
cout<<"###### 课程购买后永久学习,不受限制! ######";
return 0;
}
- 一、CSP信奥赛C++通关学习视频课:
- C++语法基础
- C++语法进阶
- C++算法
- C++数据结构
- CSP信奥赛数学
- CSP信奥赛STL
- 二、CSP信奥赛C++竞赛拿奖视频课:
- 信奥赛csp-j初赛高频考点解析
- CSP信奥赛C++复赛集训课(12大高频考点专题集训)
- 三、考级、竞赛刷题题单及题解:
- GESP C++考级真题题解
- CSP信奥赛C++初赛及复赛高频考点真题解析
- CSP信奥赛C++一等奖通关刷题题单及题解
详细内容:
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转



2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛冲刺一等奖有效刷题题解:
CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
- 2025 csp-j 复赛真题及答案解析(最新更新)
- 2025 csp-x(山东) 复赛真题及答案解析(最新更新)
- 2025 csp-x(河南) 复赛真题及答案解析(最新更新)
- 2025 csp-x(辽宁) 复赛真题及答案解析(最新更新)
- 2025 csp-x(江西) 复赛真题及答案解析(最新更新)
- 2025 csp-x(广西) 复赛真题及答案解析(最新更新)
- 2020 ~ 2024 csp 复赛真题题单及题解
- 2019 ~ 2022 csp-j 初赛高频考点真题分类解析
- 2021 ~ 2024 csp-s 初赛高频考点解析
- 2023 ~ 2024 csp-x (山东)初赛真题及答案解析
- 2024 csp-j 初赛真题及答案解析
- 2025 csp-j 初赛真题及答案解析(最新更新)
- 2025 csp-s 初赛真题及答案解析(最新更新)
- 2025 csp-x (山东)初赛真题及答案解析(最新更新)
- 2025 csp-x (江西)初赛真题及答案解析(最新更新)
- 2025 csp-x (辽宁)初赛真题及答案解析(最新更新)
CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
- 129 道刷题练习和详细题解,涉及:模拟算法、数学思维、二分算法、 前缀和、差分、深搜、广搜、DP专题、 树和图
4、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转
· 文末祝福 ·
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"跟着王老师一起学习信奥赛C++";
cout<<" 成就更好的自己! ";
cout<<" csp信奥赛一等奖属于你! ";
return 0;
}