1 条题解
-
0
思路
马路从 0 到 L,每个整数点都有一棵树,一共
L + 1棵。最简单的做法:开一个数组当"标记牌",
tree[i] = 1表示位置 i 的树还在。每读入一个区域[a, b],就把a到b之间所有位置的标记改成 0。最后数一数还剩几个 1。代码
#include <stdio.h> int tree[10001]; int main() { int L, M; scanf("%d %d", &L, &M); // 一开始所有树都在 for (int i = 0; i <= L; i++) tree[i] = 1; // 逐个区域移走树 for (int i = 0; i < M; i++) { int a, b; scanf("%d %d", &a, &b); for (int j = a; j <= b; j++) tree[j] = 0; } // 数剩下的树 int count = 0; for (int i = 0; i <= L; i++) if (tree[i] == 1) count++; printf("%d\n", count); return 0; }易错点
- 树的总数是
L + 1棵(0 位置也有一棵),不是 L 棵。 - 区域端点上的树也要移走,所以循环是
j = a; j <= b,别写成j < b。 - 区域可能重合,重复移走同一棵树没关系,因为置 0 两次效果一样。
- 树的总数是
- 1
信息
- ID
- 2
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 3
- 已通过
- 2
- 上传者
吉公网安备22010402001496号