[NOIP2005 普及组] 校门外的树
题目描述
某校大门外长度为 的马路上有一排树,每两棵相邻的树之间的间隔都是 米。我们可以把马路看成一个数轴,马路的一端在数轴 的位置,另一端在 的位置;数轴上的每个整数点,即 ,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式
第一行有两个整数,分别表示马路的长度 和区域的数目 。
接下来 行,每行两个整数 ,表示一个区域的起始点和终止点的坐标。
输出格式
输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。
样例 #1
样例输入 #1
1 | 500 3 |
样例输出 #1
1 | 298 |
提示
【数据范围】
- 对于 的数据,保证区域之间没有重合的部分。
- 对于 的数据,保证 ,,。
【题目来源】
NOIP 2005 普及组第二题
题解
1 | int_values = input().split() |
题解解释
int_values = input().split()
: 从标准输入中读取一行字符串,使用split()
方法将其拆分为字符串列表,例如['500', '3']
。int_values = list(map(int, int_values))
: 将字符串列表中的每个元素转换为整数,得到[500, 3]
。list1 = []
: 初始化一个空列表,该列表将表示整条道路上的树木分布。for i in range(int_values[0] + 1): list1.append(1)
: 使用循环,将长度为l + 1
的列表初始化为 1,其中l
是道路的长度。for i in range(int_values[1]): a, b = map(int, input().split())
: 从输入中读取区域的起始点和终止点,并将其转换为整数。for j in range(a, b + 1): list1[j] = 0
: 将区域内的树木移除,将相应的元素设置为 0。count = 0
: 初始化一个计数器,用于计算剩余的树木数量。for i in range(int_values[0] + 1): if list1[i] == 1: count += 1
: 遍历整个列表,统计值为 1 的元素的数量,即剩余的树木数量。print(count)
: 输出最终的树木数量。
另外要注意,0-l 是长度,但是要生成的列表大小是 l+1,因为包含 0,实际个数比长度多一个
知识点
list 初始化是空列表,需要 append 添加元素,不要用 list 来命名一个列表
a, b = map(int, input().split())
可以用这种写法来实现多变量存储
list 计数的方法还有 list.count()
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 W1ndysの小屋!
评论