三级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++三级练习 luogu-P1047 [NOIP 2005 普及组] 校门外的树
📅 2025-06-14·✍️ OneCoder·计算中...·⏱️ 5 分钟
#GESP#C++#一维数组
GESP C++三级练习,一维数组练习,难度★★☆☆☆。
luogu-P1047 [NOIP 2005 普及组] 校门外的树
题目要求
题目描述
某校大门外长度为 的马路上有一排树,每两棵相邻的树之间的间隔都是 米。我们可以把马路看成一个数轴,马路的一端在数轴 的位置,另一端在 的位置;数轴上的每个整数点,即 ,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式
第一行有两个整数,分别表示马路的长度 和区域的数目 。
接下来 行,每行两个整数 ,表示一个区域的起始点和终止点的坐标。
输出格式
输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。
输入输出样例 #1
输入 #1
PLAINTEXT
500 3
150 300
100 200
470 471
输出 #1
PLAINTEXT
298
数据范围
- 对于 的数据,保证区域之间没有重合的部分。
- 对于 的数据,保证 ,,。
题目分析
解题思路
本题的解题思路如下:
-
问题本质:
- 给定一条长度为l的马路,每隔1米种一棵树
- 需要移除m个区间内的所有树木
- 计算最终剩余的树木数量
-
解题关键:
- 使用数组记录每个位置是否有树
- 处理多个可能重叠的区间
- 统计未被移除的树木数量
-
实现思路:
- 创建长度为l+1的数组,初始化所有位置为1(表示有树)
- 对于每个需要移除树木的区间[u,v]:
- 将区间内所有位置标记为0(表示移除树木)
- 最后遍历整个数组,统计值为1的位置数量
-
复杂度分析:
- 时间复杂度:,其中k为区间平均长度
- 空间复杂度:,需要一个长度为l+1的数组
示例代码
CPP
#include <iostream>
#include <array>
// 定义一个长度为10005的数组,用于标记每个位置是否有树
// 初始值为1表示有树,0表示没有树
std::array<int, 10005> result_ary;
int main() {
// l表示马路长度,m表示需要移除树木的区域数量
int l, m;
std::cin >> l >> m;
// 初始化数组,所有位置都种有树
result_ary.fill(1);
// 处理每个需要移除树木的区域
for (int i = 0; i < m; i++) {
// a和b分别表示区域的起始和结束位置
int a, b;
std::cin >> a >> b;
// 将区域内的所有树木标记为已移除(值设为0)
for (int j = a; j <= b; j++) {
result_ary.at(j) = 0;
}
}
// 统计剩余树木的数量
int count = 0;
for (int i = 0; i <= l; i++) {
if (result_ary.at(i)) {
count++;
}
}
// 输出结果
std::cout << count;
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B2064, 斐波那契数列
斐波那契数列本身可能并不一定涉及数组知识点,但本题中要求的输入、输出格式涉及到三级知识点一维数组的使用。 题目本身对小学生来说,也是有一定难度的。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B3661, [语言月赛202209] 排排队
三级知识点一维数组练习,除了应用了数组以外,其余逻辑比较简单,适合初学者。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 3 分钟
【GESP】C++三级练习 luogu-B2087, 与指定数字相同的数的个数
GESP三级知识点一维数组练习,题目本身逻辑不复杂。
阅读全文 →
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
💬 读者留言与交流
还没有留言,快来成为第一个讨论者吧!