本文讲解 Java 版做法,实际上思路是大致相同的。
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args){
int l,m,u,v,count=0;
Scanner scan=new Scanner(System.in);
int[]tree=new int[10010];//首先开一个数组,因为对于100%的数据,保证 1≤l≤10^4那么开 10010 够用
l=scan.nextInt();
m=scan.nextInt();
for(int i=0;i<=l;i++)
tree[i]=1;//首先给 l+1 棵树赋值为1,代表刚开始都没有被砍
while(m-- >0)//这里要注意些,和 c/c++写法不同,如果写成(m--)会报错
{
u=scan.nextInt();
v=scan.nextInt();
for(int i=u;i<=v;i++)
tree[i]=-1;//把每次输入的区间内的树全部标记为-1,代表全部被砍掉,重合的话顶多也就是多次被标记成-1
}
for(int j=0;j<=l;j++)
if(tree[j]==1)
count++;//找出区间内标记为 1 的树,令count自增即可
System.out.println(count);
}
}
这个图就是如果写成(m--)后会报错的情况。
总体来说这个题的思路还是很关键的,不然的话会写的很麻烦,还没法AC 。欢迎各位大佬斧正。