首页 > 其他分享 >P1047 [NOIP2005 普及组] 校门外的树

P1047 [NOIP2005 普及组] 校门外的树

时间:2025-01-16 20:28:19浏览次数:3  
标签:NOIP2005 普及 移走 false int 区域 P1047 数组 移除

题目:

某校大门外长度为 ll 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 ll 的位置;数轴上的每个整数点,即 0,1,2,…,l0,1,2,…,l,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

分析:

  1. 题目分析
    • 已知马路长度 L,以及多个需要移走树的区间,每个区间由起始点和终止点表示,要计算移走这些区间内的树后剩余树的数量。
  2. 代码实现思路
    • 可以使用一个布尔数组(bool)来标记每棵树是否被移除。遍历所有的区间,将区间内的树在数组中对应的位置标记为已移除(true)。最后统计数组中未被标记(false)的元素个数,即为剩余树的数量。
  3. 代码:

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int l,m; //  输入马路长度l 输入要移走树的区域数量m
    cin >> l>>m;
    vector<bool> re(l + 1, false); 
     // 定义一个布尔数组,用于标记每棵树是否被移除,初始都为false(未移除)
    for (int i = 0; i < m; i++) {
        int start, end;// 输入每个区域的起始点和终止点
        cin >> start >> end;
        for (int j = start; j <= end; j++) {
            // 将该区域内的树标记为已移除
            re[j] = true;
        }
    }
    int count = 0;
    for (int i = 0; i <= l; i++) {
        if (!re[i]) {
            // 统计未被移除的树的数量
            count++;
        }
    }
    cout << count << endl;
    return 0;
}

代码解释:

1.首先,通过cin读取马路长度l和要移走树的区域数量m

2.然后创建一个长度为l + 1的布尔数组removed,用于标记每棵树是否被移除,初始值都为false,表示所有树都未被移除。

3.接着通过两层循环,外层循环m次,每次读取一个区域的起始点start和终止点end,内层循环将该区域内的树在removed数组中对应的位置标记为true,表示已移除。

4.最后,遍历removed数组,统计值为false的元素个数,即剩余树的数量,并输出结果。

                                                                                                                        C++编程研习社

                                                                                                                                        Hank

标签:NOIP2005,普及,移走,false,int,区域,P1047,数组,移除
From: https://blog.csdn.net/ajxqe/article/details/145191061

相关文章

  • 打卡信奥刷题(599)用C++信奥P7852[普及组/提高] 「EZEC-9」Yet Another Easy Problem
    「EZEC-9」YetAnotherEasyProblem题目描述给定n,mn,mn,m,你需要输出一个长度为......
  • 打卡信奥刷题(583)用C++信奥P7724[普及组/提高] 远古档案馆(Ancient Archive)
    远古档案馆(AncientArchive)题目背景为了揭开月光能量背后的秘密,你来到了地下的远古档案馆。远古一族的秘密与遗忘的知识悉数贮藏于这片被尘封的迷宫中,你能成功解谜,获知远古的知识吗?题目描述远古档案馆的中心是一个解谜:有一个......
  • 打卡信奥刷题(561)用C++信奥P7343[普及组/提高] 【DSOI 2021】电子跃迁
    【DSOI2021】电子跃迁题目背景“如果能证明大统一理论,这个世界将焕然一新。”“量子……量子……就差一点……”“嘶……哦。我想我明白了。”题目描述在你的视野下,出现了一排电子,他们分别拥有不同的能量。你需要做的是通过将相邻电子互换的方法,将电子排的有序。有......
  • 洛谷P2670 [NOIP2015 普及组] 扫雷游戏
    一、原理此代码旨在解决扫雷游戏中根据给定的雷区地雷分布情况,计算出每个非地雷格周围的地雷数量,并输出完整雷区信息的问题。核心原理是通过遍历二维的雷区表示数组,针对每个非地雷格,检查其周围八个方向(上、下、左、右、左上、右上、左下、右下)上的格子是否为地雷格(以 * 表示......
  • 一文讲明白朴素贝叶斯算法及其计算公式(入门普及)
    1、贝叶斯算法贝叶斯定理由英国数学家托马斯·贝叶斯(ThomasBayes)提出的,用来描述两个条件概率之间的关系。通常,事件A在事件B发生的条件下与事件B在事件A发生的条件下,它们两者的概率并不相同,但是它们两者之间存在一定的相关性,并具有以下公式,称之为贝叶斯公式:对于一......
  • 打卡信奥刷题(540)用C++信奥P7060[普及组/提高]P7060 [NWRRC2014] Alarm Clock
    [NWRRC2014]AlarmClock题面翻译Alice梦见了一个时间,但她只记得了这个时间在电子钟上显现出来的段数,现在给出这个段数,让你反推Alice梦见的时间(若有多个答案,输出任意一个均可)段数:想必大家都听说过用火柴拼数字的游戏,比如1要用两个火柴,2要用5根火柴,8要用7根火柴等等(如题目......
  • P1309 [NOIP2011 普及组] 瑞士轮 题解
    P1309[NOIP2011普及组]瑞士轮题目大意:for(i<=r)让这2n个选手的成绩降序排序,第1-第2打,第3-第4打,......,第2n-1和第2n打i--i+1打,谁能打赢?谁的实力大谁就打赢了排序最快是2nlogn,所以上述暴力过程,时间复杂度是:R(2nlog2n+2n)=2e8超时了解释:为什么是......
  • 打卡信奥刷题(523)用C++信奥P6861[普及组/提高] [RC-03] 难题
    [RC-03]难题题目描述求两个整数a,ba,ba,b(......
  • 低空经济新动力:无人机航测技术的普及与应用
    在低空经济的快速发展背景下,航空测绘(简称航测)技术的应用日益广泛,它为城市规划、农业监测、环境评估等领域提供了重要支撑。随着技术的进步和成本的降低,航测技术正逐渐从专业领域走向平民化,这不仅为低空经济的发展带来了新的机遇,也提出了新的挑战。 航测技术......
  • 孟祝翻译---给大家普及下非英专生三笔一次过的备考强度
    很多人觉得三笔难或者卡分,其实大概率是没有找对方法。很多时候你觉得简单的地方,或许需要的技巧更多。那些方法论对于刚开始接触翻译的宝子来讲,还是要系统过一遍再加以练习的,临时抱佛脚可不提倡哦~-......