解题思路:用较大的数组标记,开始时全部设置为1(表示有树),循环控制输入次数,依次输入开始和结尾数据,在范围内的设置为0(没树)。

注意事项:标记数组一定要够大。

参考代码:

#include<iostream>
using namespace std;
int main()
{
	int L, M,sum=0,beg,end;
	int i, j;
	int book[10000];
	cin >> L >> M;
	for (i = 0; i <= L; i++)
		book[i] = 1;
	for (i = 0; i < M; i++)
	{
		cin >> beg >> end;
		for (j = beg; j <=end; j++)
		{
			book[j] = 0;
		}
	}
	for (i = 0; i <= L; i++)
	{
		if (book[i] == 1)
			sum++;
	}
	cout << sum << endl;
	return 0;
}


点赞(13)
 

0.0分

16 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 3 条评论

Shai 2年前 回复TA
思路清晰,但是时间复杂度有点高
please 3年前 回复TA
这种解法不错, 我当时分情况考虑, 但情况太复杂了, 没有想到解决方法
樊小文 4年前 回复TA
其实还能再快一点,用0表示有树。因为c数组不赋值就等于0,233