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

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

解题要点:
  1. 需要遍历地图上的所有格子,即 H × W H \times W H×W 个格子
  2. 对每个格子计算:
    • 左边: r 2 + c 2 \sqrt{r^2 + c^2} r2+c2 (欧几里得距离)
    • 右边: x + r − c x + r - c x+r−c
    • 比较两边大小
  3. 注意数据范围: 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;
}
相关推荐
一起搞IT吧2 小时前
相机Camera日志实例分析之十二:相机Camx【萌拍后置zoom拍照】单帧流程日志详解
android·c++·数码相机·智能手机
十五年专注C++开发2 小时前
浅谈Qt中的QSql模块整体设计
开发语言·数据库·c++·qt
Herbert_hwt2 小时前
C语言位操作符详解:从入门到实战应用
c语言·算法
k***92162 小时前
C++:继承
java·数据库·c++
咔咔咔的2 小时前
756. 金字塔转换矩阵
c++
fqbqrr2 小时前
2601,C++的模块2
c++
ss2733 小时前
CompletionService:Java并发工具包
java·开发语言·算法
额呃呃3 小时前
select和poll之间的性能对比
开发语言·算法
王哈哈^_^3 小时前
【完整源码+数据集】道路交通事故数据集,yolo车祸检测数据集 7869 张,交通事故级别检测数据集,交通事故检测系统实战教程
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·毕业设计