目录
题目描述
某校大门外长度为 l 的马路上有一排树,每两棵相邻的树之间的间隔都是 1米。我们可以把马路看成一个数轴,马路的一端在数轴 0的位置,另一端在 l 的位置;数轴上的每个整数即0,1,2,...,l,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式
第一行有两个整数,分别表示马路的长度 l 和区域的数目 m。
接下来 m 行,每行两个整数 u,v,表示一个区域的起始点和终止点的坐标。
输出格式
输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。
输入输出样例
输入#1
500 3 150 300 100 200 470 471
输出#1
298
说明/提示
【题目解析】首先说校门外有一排树,马路上有一些区域需要建地铁。把校门外的马路看成一段数轴。以0为标准,输入的第一个起始点记为k1,第一个终点为k2。l为马路长度,m为区域数目。
看输入格式
第一行代表马路长度和区域数目,并且中间用一个空格隔开。
第二行之后分别代表移走的树的起始点和终止点,中间用空格隔开。
(1)首先我们先创建好变量。l表示马路长度(1=<l<=10000),m(1=<m<=100)为区域数目,k1表示起始点的坐标,k2表示终止点坐标。可以创建一个数组a[10001]存储留下来的树,初始值为0。有树的记为0,没有树的记为1。
#include<iostream>
using namespace std();
int main()
{
int l,m,k1,k2;
return 0;
}
(2)然后我们分析题意。题目说把马路看成一个数轴l,区域数目为m。马路的一段为数轴0的位置,另一端在l的位置。每两棵相隔的树之间的间隔都是1米。故数轴上的0,1,2,3...l都种了树。
因此我们可以创建一个数组来存储区域数目。
#include<iostream>
using namespace std;
int main()
{
int l,m,k1,k2,a[10001]={0};
return 0;
}
输入l和m,l为马路长度,m为区域数目。
#include<iostream>
using namespace std;
int main()
{
int l,m,k1,k2,a[10001]={0};
cin>>l>>m;
return 0;
}
我们定义为种的树记为0,被砍的树记为1。接着我们判断砍了多少棵树。输入k1和k2,k1为砍树的起始点,k2为砍了树的终止点。
#include<iostream>
using namespace std;
int main()
{
int l,m,k1,k2,a[10001];
cin>>l>m;
for(int i=1;i<=m;i++)//从数轴的1开始到最后一位数字(0处没有种树)
{
cin>>k1>>k2;//输入起始值和终止值
{
for(int j=k1;j<=k2;j++)//从起始值到终止值开始遍历
{
a[j]=1;
}
}
}
return 0;
}
接着判断那些位置是0(种了树的部分),如果是0就创建一个为0 的新的变量count进行存储,并且最后将count输出。
#include<iostream>
using namespace std;
int main()
{
int l,m,k1,k2,a[10001];
cin>>l>m;
//砍树的棵树
for(int i=1;i<=m;i++)//从数轴的1开始到最后一位数字(0处没有种树)
{
cin>>k1>>k2;//输入起始值和终止值
{
for(int j=k1;j<=k2;j++)//从起始值到终止值开始遍历
{
a[j]=1;
}
}
}
//剩余种了的树
for(int i=0;i<=l;i++)
{
if (a[i]=0)
{
count++;
}
}
return 0;
}
【完整代码】
#include<iostream>
using namespace std;
int main()
{
int l,m,k1,k2,a[10001];
cin>>l>m;
//砍树的棵树
for(int i=1;i<=m;i++)//从数轴的1开始到最后一位数字(0处没有种树)
{
cin>>k1>>k2;//输入起始值和终止值
{
for(int j=k1;j<=k2;j++)//从起始值到终止值开始遍历
{
a[j]=1;
}
}
}
//剩余种了的树
for(int i=0;i<=l;i++)
{
if (a[i]=0)
{
count++;
}
}
return 0;
}
【说明/提示】
在分析样例的过程中。注意被砍掉的树不要重复。
例如:
输入样例: 500 3
150 300
100 200
470 471
输出样例: 298
区间[150,300]之间共有150棵树需要被砍伐。[100,200] 中与第一个区间有所重合,而在第一个区间中第151棵树已经被砍伐,故第二个区间实际应为[100,149]共有49棵树。区间[470,471]中有2棵树。一共202棵树,故剩余298棵树。