题目描述

有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,…,L共L+1个位置上有L+1棵树。
现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。
可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。

输入

两个整数L(1<=L<=10000)和M(1<=M<=100)。
接下来有M组整数,每组有一对数字。

输出

可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。

样例输入 Copy

4 2
1 2
0 2
11 2
1 5
4 7
0 0

样例输出 Copy

2
5

源码

#include <iostream>
#include <stdio.h>using namespace std;int main(){int n,m,x,y,maxs,mins,a,rest;scanf("%d %d",&n,&m);//可以使其输入很多组,直到n,m均为0时停止循环,输出结果while(n != 0 && m != 0){int arr[2*m];int j = 0;for(int i = 0; i < m; i ++){scanf("%d %d",&x,&y);arr[j] = x;j ++;arr[j] = y;j ++;}maxs = arr[0];mins = arr[0];//比较最大的区间端点for(int i = 1;i < 2*m;i ++){if(maxs <= arr[i]){maxs = arr[i];}}//比较最小区间端点for(int i = 0;i < 2*m;i ++){if(mins >= arr[i]){mins = arr[i];}}//计算区间中有多少棵树(包含端点)a = maxs - mins + 1;rest = (n + 1) - a;printf("%d\n",rest);scanf("%d %d",&n,&m);}return 0;
}

学习笔记

1 求剩余的树
总树 - 移走的树 = 剩下的树,L - n = rest
2 如何求移走的树
(1)将树看作数轴上的点,有m组区间,即2m个点,就要arr[2m]个数组
(2)如果区间之间没有空隙,就会刚好连续或者有重叠,那么就可以比较每个点的值,通过循环遍历比较出最小值arr[min],最大值arr[max],求出移走的树n = arr[max] - arr[min]+1
3 如何判断输入结束
我们在给出的示例中可以发现,在结束时给出的n和m为0。这样题目就隐晦的表示输入结束的标志就是n和m均为0时终止输入。所以我们设置while循环的条件为n != 0 && m != 0
4 如何输入多组数据
输入为多组时如何正确区别组就得益于m的值。m的值就是在之后还要再输入几行移走树木的区间的个数。用for循环就可以准确的输入移走树木的个数
5 优化
我没有考虑到区间没有连续的时候,那么上述方法就会多移走那些没有连续的树,如果还像上述方法的那样比较的话就很麻烦。所以我们可以将区间包括其端进行标记,如果arr[i] = 0表示没有移除,n++,arr[i] = 1表示已经移除的,n就不加

#include<stdio.h>
#include<string.h>
int main()
{int arr[10005]={0};int a,b,remove_num,L,M;while(scanf("%d%d",&L,&M),L||M) // L,M都为0则停止循环{memset(arr,0,sizeof(arr));  // 每次将标记数据初始化为全0remove_num=0;   // 代表移除树木的个数   每次必须初始化为0while(M--) // M为0停止循环 代表标记完一组区间,就进行下一组标记{scanf("%d%d",&a,&b); // 输入区间端点for(int i=a;i<=b;i++){if(arr[i]==0)  // 0代表还没有移除 此时可以统计进去  1代表已移除 代表重复  不可以统计进去{remove_num++; // 进行计数arr[i]=1; // 计数后将其标记为1}}}printf("%d\n",L+1-remove_num); // 因为包含端点所以加1}return 0;
}

PAT100000575-剩下的树相关推荐

  1. Codeup 墓地——1814: 剩下的树

    1814: 剩下的树 时间限制: 1 Sec  内存限制: 32 MB 提交: 2403  解决: 928 [提交][状态][讨论版][命题人:外部导入] 题目描述 有一个长度为整数L(1<=L ...

  2. 九度1088——剩下的树

    九度1088 题目描述: 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,-,L共L+1个 ...

  3. [Codeup]1814 问题 A: 剩下的树

    题目描述 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,-,L共L+1个位置上有L+1棵 ...

  4. Codeup 1814.剩下的树

    -------------------- /*  * Copyright (c) 2014, 烟台大学计算机学院  * All rights reserved.  * 文件名称:test.cpp  * ...

  5. 1814 Problem A 剩下的树

    问题 A: 剩下的树 时间限制: 1 Sec  内存限制: 32 MB 题目描述 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在 ...

  6. 九度OJ-1088剩下的树

    题目地址 http://ac.jobdu.com/problem.php?pid=1088 //线段树 区间更新 #include <cstdio> #include <algori ...

  7. 霍夫曼树(最优二叉树)的实现

    文章目录 一.相关概念 1.节点的路径及路径长度 2.节点的带权路径长度 3.树的带权路径长度 4.霍夫曼树 二.构建步骤与图解 1.构建步骤 2.图解 三.代码实现 1.创建节点类: 2.创建霍夫曼 ...

  8. 洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)

    题目链接:点击查看 题目大意:给出一棵 n 个节点的树 A ,再给出一棵 n + 1 个节点的树 B,题目保证了树 B 是树 A 添加了一个叶子结点后的一棵树,只不过编号的顺序不同,现在问这个叶子节点 ...

  9. 信息学奥赛一本通 1107:校门外的树 | 1931:【05NOIP普及组】校门外的树 | OpenJudge NOI 1.6 06 | 洛谷 P1047 [NOIP2005 普及组] 校门外的树

    [题目链接] ybt 1107:校门外的树 ybt 1931:[05NOIP普及组]校门外的树 OpenJudge NOI 1.6 06:校门外的树 洛谷 P1047 [NOIP2005 普及组] 校 ...

最新文章

  1. 索赔cs1.6最新服务器,成功解决CS1.6刷不出服务器
  2. VTK:Filtering之TransformPolyData
  3. 在OpenShift上将JMS与JBoss A-MQ结合使用。 从远程客户端和加密中学到的经验教训。...
  4. 哈哈机器人送到冰雪小镇_从小镇到上海:两代人的接力洄游 | 活动回顾
  5. python分析服务器日志_python实现web服务器日志分析脚本
  6. Android之使用SoundPool播放一小段音频,实现猜歌的功能
  7. 机器学习项目必经十大磨难,看看自己渡过几劫了?
  8. 华为有国产芯片的服务器吗,华为国产电脑上市!还有一大批国产自主电脑发布:采用国产芯/系统...
  9. 【Codeforces Global Round 1 C】Meaningless Operations
  10. Linux 各目录的作用
  11. 2018年数学建模竞赛-高温作业专用服装设计
  12. 设计模式在项目中的应用案例_BIM案例 | BIM技术在码头项目中的创新应用
  13. octobercms mysql_在Ubuntu 18.04/Debian 9上安装October CMS
  14. 全年DDoS攻击分析|知道创宇云安全2018年度网络安全态势报告
  15. kafka重新分配partition
  16. JavaScript(第三天)—爱创课堂专业前端培训
  17. 3天10万,5天20万!中山公园这场摄影大赛是如何做到的?
  18. ram android手机 占用,一问易答:为何安卓机RAM使用率总是很高
  19. 熊猫烧香攻防战 武汉男孩称不再更新版本
  20. Linux scp远程文件/目录传输 用ps和grep命令寻找僵尸进程

热门文章

  1. Spring-jdbc-ConnectionHolder
  2. Spring-web-MultipartFile上传文件
  3. 迷你世界无限迷你币体验服务器,迷你世界体验服无限迷你币
  4. python语言基础笔记_Python语言 基础知识笔记
  5. mysql 中文 3个字节_mysql 字节问题,中文和数字
  6. 特征图注意力_ICLR2017 | AT_注意力引导的知识蒸馏
  7. codevs 5958 无
  8. python 中time, datetime的用法
  9. ReactJS实用技巧(1):JSX与HTML的那些不同
  10. C语言第三节关键字、标识符、注释