PAT100000575-剩下的树
题目描述
有一个长度为整数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-剩下的树相关推荐
- Codeup 墓地——1814: 剩下的树
1814: 剩下的树 时间限制: 1 Sec 内存限制: 32 MB 提交: 2403 解决: 928 [提交][状态][讨论版][命题人:外部导入] 题目描述 有一个长度为整数L(1<=L ...
- 九度1088——剩下的树
九度1088 题目描述: 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,-,L共L+1个 ...
- [Codeup]1814 问题 A: 剩下的树
题目描述 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,-,L共L+1个位置上有L+1棵 ...
- Codeup 1814.剩下的树
-------------------- /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * ...
- 1814 Problem A 剩下的树
问题 A: 剩下的树 时间限制: 1 Sec 内存限制: 32 MB 题目描述 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在 ...
- 九度OJ-1088剩下的树
题目地址 http://ac.jobdu.com/problem.php?pid=1088 //线段树 区间更新 #include <cstdio> #include <algori ...
- 霍夫曼树(最优二叉树)的实现
文章目录 一.相关概念 1.节点的路径及路径长度 2.节点的带权路径长度 3.树的带权路径长度 4.霍夫曼树 二.构建步骤与图解 1.构建步骤 2.图解 三.代码实现 1.创建节点类: 2.创建霍夫曼 ...
- 洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)
题目链接:点击查看 题目大意:给出一棵 n 个节点的树 A ,再给出一棵 n + 1 个节点的树 B,题目保证了树 B 是树 A 添加了一个叶子结点后的一棵树,只不过编号的顺序不同,现在问这个叶子节点 ...
- 信息学奥赛一本通 1107:校门外的树 | 1931:【05NOIP普及组】校门外的树 | OpenJudge NOI 1.6 06 | 洛谷 P1047 [NOIP2005 普及组] 校门外的树
[题目链接] ybt 1107:校门外的树 ybt 1931:[05NOIP普及组]校门外的树 OpenJudge NOI 1.6 06:校门外的树 洛谷 P1047 [NOIP2005 普及组] 校 ...
最新文章
- 索赔cs1.6最新服务器,成功解决CS1.6刷不出服务器
- VTK:Filtering之TransformPolyData
- 在OpenShift上将JMS与JBoss A-MQ结合使用。 从远程客户端和加密中学到的经验教训。...
- 哈哈机器人送到冰雪小镇_从小镇到上海:两代人的接力洄游 | 活动回顾
- python分析服务器日志_python实现web服务器日志分析脚本
- Android之使用SoundPool播放一小段音频,实现猜歌的功能
- 机器学习项目必经十大磨难,看看自己渡过几劫了?
- 华为有国产芯片的服务器吗,华为国产电脑上市!还有一大批国产自主电脑发布:采用国产芯/系统...
- 【Codeforces Global Round 1 C】Meaningless Operations
- Linux 各目录的作用
- 2018年数学建模竞赛-高温作业专用服装设计
- 设计模式在项目中的应用案例_BIM案例 | BIM技术在码头项目中的创新应用
- octobercms mysql_在Ubuntu 18.04/Debian 9上安装October CMS
- 全年DDoS攻击分析|知道创宇云安全2018年度网络安全态势报告
- kafka重新分配partition
- JavaScript(第三天)—爱创课堂专业前端培训
- 3天10万,5天20万!中山公园这场摄影大赛是如何做到的?
- ram android手机 占用,一问易答:为何安卓机RAM使用率总是很高
- 熊猫烧香攻防战 武汉男孩称不再更新版本
- Linux scp远程文件/目录传输 用ps和grep命令寻找僵尸进程
热门文章
- Spring-jdbc-ConnectionHolder
- Spring-web-MultipartFile上传文件
- 迷你世界无限迷你币体验服务器,迷你世界体验服无限迷你币
- python语言基础笔记_Python语言 基础知识笔记
- mysql 中文 3个字节_mysql 字节问题,中文和数字
- 特征图注意力_ICLR2017 | AT_注意力引导的知识蒸馏
- codevs 5958 无
- python 中time, datetime的用法
- ReactJS实用技巧(1):JSX与HTML的那些不同
- C语言第三节关键字、标识符、注释