GESP认证C++编程真题解析 | 202406 八级

news/2026/1/18 9:16:49/文章来源:https://www.cnblogs.com/guolianggsta/p/19497798

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


编程题

P10725 最远点对

【题目来源】

洛谷:[P10725 GESP202406 八级] 最远点对 - 洛谷

【题目描述】

小杨有一棵包含 \(n\) 个节点的树,这棵树上的任意一个节点要么是白色,要么是黑色。

小杨想知道相距最远的一对不同颜色节点的距离是多少。

【输入】

第一行包含一个正整数 \(n\),代表树的节点数。

第二行包含 \(n\) 个非负整数 \(a_1,a_2,\dots,a_n\)(对于所有的 \(1\le i\le n\),均有 \(a_i\) 等于 0 或 1),其中如果 \(a_i=0\),则节点 \(i\) 的颜色为白色;如果 \(a_i=1\),则节点 \(i\) 的颜色为黑色。

之后 \(n-1\) 行,每行包含两个正整数 \(x_i,y_i\),代表存在一条连接节点 \(x_i\)\(y_i\) 的边。

保证输入的树中存在不同颜色的点。

【输出】

输出一个整数,代表相距最远的一对不同颜色节点的距离。

【输入样例】

5
0 1 0 1 0
1 2
1 3 
3 4 
3 5

【输出样例】

3

【算法标签】

《洛谷 P10725 最远点对》 #树的遍历# #GESP# #2024#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 100005, M = N * 2;
int n;                          // 节点数
int a[N];                       // a[i]: 节点i的颜色,0或1
int col0[N], col1[N];          // col0[i]: 以节点i为根的子树中,距离i最近的0色节点的距离// col1[i]: 以节点i为根的子树中,距离i最近的1色节点的距离
int ans;                        // 答案:最长异色路径长度
int h[N], e[M], ne[M], w[M], idx;  // 邻接表存储树// 添加无向边
void add(int a, int b, int c)
{e[idx] = b;         // 边的终点w[idx] = c;         // 边权,这里都是1ne[idx] = h[a];     // 插入到链表头部h[a] = idx;         // 更新头指针idx++;              // 边编号自增
}// 深度优先搜索
// u: 当前节点
// fa: 父节点
void dfs(int u, int fa)
{// 初始化当前节点的col0和col1if (a[u] == 1){col1[u] = 0;  // 如果当前节点是1色,距离为0}else{col0[u] = 0;  // 如果当前节点是0色,距离为0}// 遍历所有邻居节点for (int i = h[u]; i != -1; i = ne[i]){int j = e[i];  // 邻居节点if (j == fa)   // 如果是父节点,跳过{continue;}// 递归处理子树dfs(j, u);// 关键:更新答案// 如果u是0色,j的子树中有1色节点,形成异色路径if (col0[u] >= 0 && col1[j] >= 0){ans = max(ans, col1[j] + col0[u] + 1);}// 如果u是1色,j的子树中有0色节点,形成异色路径if (col1[u] >=0 && col0[j] >= 0){ans = max(ans, col0[j] + col1[u] + 1);}// 更新当前节点的col0和col1col1[u] = max(col1[u], col1[j] + 1);col0[u] = max(col0[u], col0[j] + 1);}
}int main()
{// 输入节点数cin >> n;// 初始化邻接表memset(h, -1, sizeof(h));// 输入每个节点的颜色for (int i = 1; i <= n; i++){cin >> a[i];// 初始化col0和col1为负无穷col0[i] = -1e9;col1[i] = -1e9;}// 输入n-1条边,构建树for (int i = 1; i < n; i++){int u, v;cin >> u >> v;add(u, v, 1);  // 添加无向边,边权为1add(v, u, 1);}// 从节点1开始DFSdfs(1, 0);// 输出答案cout << ans << endl;return 0;
}

【运行结果】

5
0 1 0 1 0
1 2
1 3
3 4
3 5
3

P10726 空间跳跃

【题目来源】

洛谷:P10726 [GESP202406 八级] 空间跳跃 - 洛谷 (luogu.com.cn)

【题目描述】

小杨在二维空间中有 \(n\) 个水平挡板,并且挡板之间彼此不重叠,其中第 \(i\) 个挡板处于水平高度 \(h_i\),左右端点分别位于 \(l_i\)\(r_i\)

小杨可以在挡板上左右移动,当小杨移动到右端点时,如果再向右移动会竖直掉落,从而落到下方第一个挡板上, 移动到左端点时同理。小杨在挡板上每移动 \(1\) 个单位长度会耗费 \(1\) 个单位时间,掉落时每掉落 \(1\) 个单位高度也会耗费 \(1\) 个单位时间。

小杨想知道,从第 \(s\) 个挡板上的左端点出发到第 \(t\) 个挡板需要耗费的最少时间是多少?

注意:可能无法从第 \(s\) 个挡板到达到第 \(t\) 个挡板。

【输入】

第一行包含一个正整数 \(n\),代表挡板数量。

第二行包含两个正整数 \(s,t\),含义如题面所示。

之后 \(n\) 行,每行包含三个正整数 \(l_i,r_i,h_i\),代表第 \(i\) 个挡板的左右端点位置与高度。

【输出】

输出一个整数代表需要耗费的最少时间,如果无法到达则输出 \(-1\)

【输入样例】

3
3 1
5 6 3
3 5 6
1 4 100000

【输出样例】

100001

【算法标签】

《洛谷 P10726 空间跳跃》 #动规规划DP# #最短路# #GESP# #2024#

【代码详解】

#include <bits/stdc++.h>
using namespace std;struct Node
{int id;       // 平台编号int l, r;     // 平台左右端点int h;        // 平台高度
} a[1005];        // 平台数组int n, s, t;      // n: 平台数量, s: 起点平台编号, t: 终点平台编号
int dp[1005][2];  // dp[i][0]: 到达平台i左端点的最小时间// dp[i][1]: 到达平台i右端点的最小时间// 排序比较函数:按高度从高到低排序
bool cmp(Node x, Node y)
{return x.h > y.h;
}int main()
{// 读入数据cin >> n >> s >> t;for (int i = 1; i <= n; i++){cin >> a[i].l >> a[i].r >> a[i].h;a[i].id = i;  // 记录原始编号}// 检查合法性if (a[s].h < a[t].h)  // 起点高度必须不低于终点{cout << -1 << endl;return 0;}else if (s == t)  // 起点和终点相同{cout << 0 << endl;return 0;}// 按高度从高到低排序sort(a + 1, a + n + 1, cmp);// 找到排序后起点和终点的位置int k = 1;while (a[k].id != s){k++;}s = k;  // 更新起点在排序后数组中的位置k = 1;while (a[k].id != t){k++;}t = k;  // 更新终点在排序后数组中的位置// 初始化DP数组为无穷大memset(dp, 0x3f, sizeof(dp));// 初始化起点dp[s][0] = 0;                          // 在起点平台左端点dp[s][1] = a[s].r - a[s].l;            // 在起点平台右端点,需要横向走过去// 动态规划:从高到低处理平台for (int i = s; i < t; i++)           // i: 当前平台{// 情况1:从当前平台i的左端点下落for (int j = i + 1; j <= t; j++)   // j: 下方平台{// 检查是否能落到平台j上(当前平台左端点垂直下方在平台j范围内)if (a[i].l >= a[j].l && a[i].l <= a[j].r){if (j != t)  // 如果不是终点平台{// 到达平台j左端点的最小时间dp[j][0] = min(dp[j][0], dp[i][0] + (a[i].h - a[j].h) + (a[i].l - a[j].l));// 到达平台j右端点的最小时间dp[j][1] = min(dp[j][1], dp[i][0] + (a[i].h - a[j].h) + (a[j].r - a[i].l));}else  // 如果是终点平台{// 只需要到达左端点(到达终点即可)dp[j][0] = min(dp[j][0], dp[i][0] + (a[i].h - a[j].h));}break;  // 只能落到第一个遇到的平台上}}// 情况2:从当前平台i的右端点下落for (int j = i + 1; j <= t; j++)   // j: 下方平台{// 检查是否能落到平台j上(当前平台右端点垂直下方在平台j范围内)if (a[i].r >= a[j].l && a[i].r <= a[j].r){if (j != t)  // 如果不是终点平台{// 到达平台j左端点的最小时间dp[j][0] = min(dp[j][0], dp[i][1] + (a[i].h - a[j].h) + (a[i].r - a[j].l));// 到达平台j右端点的最小时间dp[j][1] = min(dp[j][1], dp[i][1] + (a[i].h - a[j].h) + (a[j].r - a[i].r));}else  // 如果是终点平台{// 只需要到达左端点(到达终点即可)dp[j][0] = min(dp[j][0], dp[i][1] + (a[i].h - a[j].h));}break;  // 只能落到第一个遇到的平台上}}}// 输出结果if (dp[t][0] == 0x3f3f3f3f)  // 无法到达终点{cout << -1 << endl;}else{cout << min(dp[t][0], dp[t][1]) << endl;  // 取到达终点左端点或右端点的最小值}return 0;
}

【运行结果】

3
3 1
5 6 3
3 5 6
1 4 100000
100001

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1177601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

‌AI伦理在软件开发中的雷区:如何避免灾难性bug‌

当代码背负道德枷锁 在自动驾驶系统误判行人轨迹、招聘算法强化性别歧视、医疗诊断模型遗漏少数族裔病症等事故频发的2026年&#xff0c;AI伦理已从哲学命题升级为测试工程师的核心战场。本文结合欧盟《人工智能法案》等新规及全球典型案例&#xff0c;构建可落地的伦理风险测…

2026-01-17-牛客刷题笔记-有趣的区间

题目信息 平台&#xff1a;牛客题目&#xff1a;有趣的区间题目链接 题目描述 给定长度为 n 的整数数组&#xff0c;统计满足条件的子区间数量。根据代码语义推断&#xff1a;区间内至少包含一个奇数时&#xff0c;该区间被视为“有趣”。 初步思路 总子区间数为 n*(n1)/2。…

RPC分布式通信(3)--RPC基础框架接口

一、MprpcApplication 核心职责MprpcApplication是 RPC 框架的 “管家”&#xff0c;核心作用&#xff1a;单例模式&#xff1a;全局唯一实例&#xff0c;避免重复初始化&#xff1b;配置加载&#xff1a;解析 RPC 框架的配置文件&#xff08;如服务器 IP、端口、日志路径、注册…

2026-01-17-LeetCode刷题笔记-3047-求交集区域内的最大正方形面积

题目信息 平台&#xff1a;LeetCode题目&#xff1a;3047. 求交集区域内的最大正方形面积难度&#xff1a;Medium题目链接&#xff1a;Find the Largest Area of Square Inside Two Rectangles 题目描述 给定若干轴对齐矩形&#xff08;用左下角与右上角坐标表示&#xff09;…

2025年广州市“人工智能+“典型案例集

扫描下载文档详情页: https://www.didaidea.com/wenku/16354.html

实用指南:零基础学AI大模型之Milvus DML实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

DeepSeek V4架构深度解析:梁文锋团队开辟的「存算分离」新范式

扫描下载文档详情页: https://www.didaidea.com/wenku/16353.html

2026年量子计算:算力革命与安全新范式报告

扫描下载文档详情页: https://www.didaidea.com/wenku/16352.html

互联网大厂Java求职面试实战:从微服务到AI集成的全栈技术问答

互联网大厂Java求职面试实战&#xff1a;从微服务到AI集成的全栈技术问答 场景背景 互联网大厂Java岗位面试&#xff0c;面试官严肃专业&#xff0c;求职者谢飞机幽默搞笑。技术覆盖Java SE、Spring生态、数据库ORM、微服务、云原生、安全、消息队列、缓存、日志监控、大数据与…

Fun-ASR-MLT-Nano-2512语音餐饮:点餐语音识别系统

Fun-ASR-MLT-Nano-2512语音餐饮&#xff1a;点餐语音识别系统 1. 项目背景与技术价值 随着智能餐饮系统的快速发展&#xff0c;传统人工点餐模式在高峰时段面临效率低下、出错率高等问题。将语音识别技术应用于餐饮场景&#xff0c;能够显著提升服务效率和用户体验。Fun-ASR-…

详细介绍:Apache Flink SQL 入门与常见问题解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Qwen2.5-7B-Instruct部署教程:智能数据分析流水线

Qwen2.5-7B-Instruct部署教程&#xff1a;智能数据分析流水线 1. 技术背景与目标 随着大语言模型在自然语言理解、代码生成和结构化数据处理能力的持续提升&#xff0c;将高性能模型集成到实际业务流程中已成为构建智能化系统的关键环节。Qwen2.5-7B-Instruct 作为通义千问系…

基于Java ssm家庭财务管理系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架SSM前端框架vueSSM框架详细介绍系统测试 四、代码参考 源码获取 目的 摘要&#xff1a;随着家庭经济活动的复杂化&#xff0c;传统手工记账方式已难以满足现代家庭对财务管理的需求。本…

PyTorch-2.x降本增效实战:纯净系统+阿里源部署省时50%

PyTorch-2.x降本增效实战&#xff1a;纯净系统阿里源部署省时50% 1. 引言 在深度学习项目开发中&#xff0c;环境配置往往是耗时且容易出错的第一道门槛。尤其是在使用PyTorch进行模型训练与微调时&#xff0c;依赖冲突、下载缓慢、CUDA版本不匹配等问题频繁出现&#xff0c;…

基于Java springboot医院低值耗材管理系统耗材出入库(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试 四、代码参考 源码获取 目的 摘要&#xff1a;医院低值耗材管理是医疗运营的重要环节&#xff0c;传统人工管理模式存在效率低、…

零基础理解TC3xx中AUTOSAR OS的保护机制核心要点

从零搞懂TC3xx上AUTOSAR OS的保护机制&#xff1a;MPU与任务隔离如何协同守护系统安全你有没有遇到过这样的问题&#xff1f;一个看似简单的指针越界&#xff0c;却让整个ECU突然“死机”&#xff1b;某个非关键任务因为数组访问错误&#xff0c;意外改写了刹车控制模块的关键变…

YOLOv9教育科研应用:高校计算机视觉课程实验设计

YOLOv9教育科研应用&#xff1a;高校计算机视觉课程实验设计 1. 背景与教学目标 随着人工智能技术的快速发展&#xff0c;计算机视觉已成为高校人工智能、自动化、电子信息等专业的重要教学内容。目标检测作为其中的核心任务之一&#xff0c;广泛应用于智能监控、自动驾驶、工…

如何用cv_unet_image-matting实现精准人像抠图?保姆级WebUI部署教程入门必看

如何用cv_unet_image-matting实现精准人像抠图&#xff1f;保姆级WebUI部署教程入门必看 1. 引言 随着AI图像处理技术的快速发展&#xff0c;自动人像抠图已成为设计、电商、摄影等领域的刚需功能。传统手动抠图耗时耗力&#xff0c;而基于深度学习的智能抠图方案则能实现“一…

Whisper语音识别优化:减少GPU显存占用的7个技巧

Whisper语音识别优化&#xff1a;减少GPU显存占用的7个技巧 1. 背景与挑战 1.1 Whisper模型的资源消耗现状 OpenAI发布的Whisper系列模型在多语言语音识别任务中表现出色&#xff0c;尤其是large-v3版本&#xff0c;在99种语言上的自动检测与转录能力使其成为跨语言ASR系统的…

一文说清USB接口的供电与充电规范

一文讲透USB供电与充电规范&#xff1a;从500mA到240W的演进之路你有没有遇到过这样的情况&#xff1f;明明手机支持“65W超级快充”&#xff0c;插上充电器却只能以18W慢悠悠地充&#xff1b;或者用着号称“PD快充”的线缆&#xff0c;结果笔记本压根无法唤醒高电压模式。问题…