天天看点

信息学奥赛一本通 1107:校门外的树 | 1931:【05NOIP普及组】校门外的树 | OpenJudge NOI 1.6 06

【题目链接】

ybt 1107:校门外的树

ybt 1931:【05NOIP普及组】校门外的树

OpenJudge NOI 1.6 06:校门外的树

【题目考点】

1. 数组

2. 模拟

【解题思路】

用数组模拟各位置是否有树

  • 设布尔类型数组a,a[i]表示第i位置是否有树
  • 先将0~L的位置都设为有树,把对应数组元素设为true
  • 把每个划定的区域设为无树,把对应数组元素设为false
  • 最后统计还剩下多少树,即数组a的0~L的位置中,还有多少个元素为true。

【题解代码】

解法1:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    bool a[10005];//如果位置i有树,a[i]保存为true,否则保存为false
	int l, m, start, end, s = 0;//s:树木数量统计 
	cin>>l>>m;
	for(int i = 0; i <= l; ++i)//a[0]~a[m]先设为有树 
		a[i] = true;
	for(int i = 0; i < m; ++i)//m个区域 
	{
		cin>>start>>end;//输入每个区域的起始点和终止点 
		for(int j = start; j <= end; ++j)//a[start]到a[end]设为无树 
			a[j] = false;
	}
	for(int i = 0; i <= l; ++i)
	{
		if(a[i])
			s++;//或将这两行写为 s += a[i]; 
	}
	cout<<s;
    return 0;
}