一、题目链接
http://noi.openjudge.cn/ch0106/06/
二、解题思路
⑴ 通过数组trees标记马路上所有树的状态:trees[i]为1代表位置i上有一棵树,为0代表位置i上没有树,初始
时数组trees的每个元素均为1,0 <= i <= L,这里L代表马路的长度;
⑵ 通过数组start和end标记每个地铁站的起始位置和终止位置,显然,对于第i个地铁站,start[i]和end[i]
位置之间的树均需要被移除,也即需要令trees[start[i]]到trees[end[i]]之间的值为0,0 <= i < n,这里
n代表地铁站的数量;
⑶ 显然,方法treesRemained需要注入三个参数:int L、int[] start、int[] end,分别代表马路长度、存
储每个地铁站的起始坐标、存储每个地铁站的终止坐标,方法treesRemained的返回值为int,存储马路上剩余树
木的数量。
三、程序代码
import java.util.Scanner;
public class Main {
public int treesRemained(int L, int[] start, int[] end) {
int n = start.length;
int ans = 0;
int[] trees = new int[L + 1];
int i;
int j;
for (i = 0; i < L + 1; i++) {
trees[i] = 1;
}
for (i = 0; i < n; i++) {
for (j = start[i]; j <= end[i]; j++) {
trees[j] = 0;
}
}
for (i = 0; i < L + 1; i++) {
ans = (trees[i] == 1 ? ans + 1 : ans);
}
return ans;
}
public static void main(String[] args) {
Main test = new Main();
Scanner input = new Scanner(System.in);
int L = input.nextInt();
int M = input.nextInt();
int[] start = new int[M];
int[] end = new int[M];
for (int i = 0; i < M; i++) {
start[i] = input.nextInt();
end[i] = input.nextInt();
}
System.out.print(test.treesRemained(L, start, end));
}
}