luogu P1047 校门外的树 x
P1047 校门外的树
题目描述
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入输出格式
输入格式:
输入文件tree.in的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
输出格式:
输出文件tree.out包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
输入输出样例
500 3
150 300
100 200
470 471
298
说明
NOIP2005普及组第二题
对于20%的数据,区域之间没有重合的部分;
对于其它的数据,区域之间有重合的情况。
思路:
1)模拟!
数据范围辣么小!!!直接开个布尔数组记录一下是不是被砍了不就行咯?最后从头到尾扫一遍,没被砍就ans++,最后输出ans,完啦~
2)线段树!
其实我是很惊讶的!这么个模拟就能够水过去的题还可以用线段树做,代码虽然也不长,但是比模拟要长上好多QwQ
但是我还是作死的写了.Orz.
代码酱来也~
#include <iostream>
#include <cstdio>
#include <cmath> using namespace std; const int M = 1e4 + ;///范围QwQ
int Ls,m,ans;
bool kan[M];///记录是否被砍掉 int main()
{
scanf("%d%d",&Ls,&m);
int l,r;
for(int i=;i<m;i++)
{
scanf("%d%d",&l,&r);
if(l>r) swap(l,r);///闲得慌hhh
for(int j=l;j<=r;j++)
{
if(!kan[j]) kan[j]=;///砍啦~~~
}
}
for(int i=;i<=Ls;i++)
if(!kan[i]) ans++;
printf("%d",ans);
return ;
}
模拟
#include <iostream>
#include <cstdio>
///方便快捷的写代码~
#define lez k<<1
#define rez k<<1|1
#define mid ((l+r)>>1) using namespace std; const int M = 1e4 + ;
int Ls,Ms;
int lefts,rights; struct Trees{
int l,r;
int now;///当前有多少棵没被砍掉的树
}t[M*];///!!!要开四倍空间 inline void build(int k,int ld,int rd)
{///建树过程
t[k].l=ld,t[k].r=rd;///赋值
if(ld==rd)
{
t[k].now=;///递归到叶子节点
return ;
}
int m = (ld+rd) >> ;///中间节点
build(lez,ld,m);///建左子树
build(rez,m+,rd);///右子树
t[k].now=t[lez].now+t[rez].now;///更新棵数
} inline void change(int l,int r,int k)
{///更新线段树,以及我们更新要建火车站的范围
l=t[k].l,r=t[k].r;
///如果当前递归到的是超出需要修改的范围的(或者该地已经没有树咯),就跳出
if(l>rights || r<lefts || t[k].now == ) return ;
///如果刚好在范围之内
if(lefts<=l && rights>=r)
{
t[k].now=;///进行修改
return ;
}
change(l,mid,lez);///更新左子树
change(mid+,r,rez);///右子树
t[k].now=t[lez].now+t[rez].now;///必须更新棵数!!!
} int main()
{
scanf("%d%d",&Ls,&Ms);
Ls++;///因为题目中的是从0开始的,所以要多加一个
build(,,Ls);
for(int i=;i<=Ms;i++)///类似于Ms次修改询问???
{
scanf("%d%d",&lefts,&rights);///左右端点
lefts++;rights++;
change(,Ls,);
}
printf("%d",t[].now);///最后直接输出第一个根节点的棵树,不就行了咩?
return ;
}
///End.
线段树
End.
luogu P1047 校门外的树 x的更多相关文章
- luogu P1047 校门外的树
题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种 ...
- P1047 校门外的树
P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- 洛谷P1047 校门外的树
P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- 洛谷——P1047 校门外的树
P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- Luogu P1276 校门外的树(增强版)
Luogu P1276 校门外的树(增强版) 本来看着是道普及-,就不打算写博客了,结果因为出了3次错,调试了15min就还是决定写一下-- 本题坑点: 1.每个位置有三种情况:空穴,树苗,树(而不只 ...
- 【洛谷】【线段树】P1047 校门外的树
[题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L ...
- [模拟]P1047 校门外的树
校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,- ...
- 洛谷 P1047 校门外的树(待完善)
链接:https://www.luogu.org/problemnew/show/P1047 题目: 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是11米.我们可以把马路看 ...
- 洛谷题解P1047 校门外的树
题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,…,L,都种有 ...
随机推荐
- 自动化生成 Openstack 新项目开发框架
目录 目录 前言 环境 openstack-project-generator 前言 Openstack Developer 应该都知道, 开发一个 Openstack 的新项目并不是一个从 0 到 ...
- 从SOA 谈软件的发展
本文是个科普文章,有些内容可能不精准,为了给女儿解释SOA所写.要深刻理解SOA,必须了解软件的发展过程.互联网上有大量的这方面的文章可以参考. 软件与计算机 软件这个概念很年轻,也就不到70年. 软 ...
- Jenkins持续集成_03_添加测试报告
前言 Jenkins持续集成自动化测试项目后,可以在控制台输出中查看测试结果,但是这样排查起来往往不够直观.为了更直观的查看测试结果,可以在Jenkins上展示测试报告.测试报告中测试结果情况展示的更 ...
- 【openstf】自己的云测平台——mac安装openstf
openstf的github地址:https://github.com/openstf/stf 上图可以清晰看出openstf的使用场景和效果 openstf是一个web应用程序,用于远程调试智能 ...
- 四种pop模式介绍
四种pop模式介绍 URL:http://www.hishop.com.cn/ecschool/jd/show_21195.html URL:https://zhidao.baidu.com/ques ...
- data plugin for vs2019
Reporting Service projects for VS 2019https://marketplace.visualstudio.com/items?itemName=ProBITools ...
- python对excel表格进行操作
python 对 EXCEL 进行操作 背景:对excel表格中某一列进行base 64解码操作,由于数据量比较庞大,就考虑用Python代码完成. 首先,分析整个文件操作中分为三步,第一步,对需要解 ...
- Numerical Sequence (easy version)
http://codeforces.com/problemset/problem/1216/E1 E1. Numerical Sequence (easy version) time limit pe ...
- day20 博客系统开发
setting 文件加入 AUTH_USER_MODEL = "app名称.UserInfo" from django.db import models # Create ...
- 小白学Python(18)——pyecharts 关系图 Graph
Graph-基本示例 import json import os from pyecharts import options as opts from pyecharts.charts import ...