P1047 [NOIP2005 普及组] 校门外的树

发布时间:2024年01月20日

一、前言

本文讲解 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 。欢迎各位大佬斧正。

文章来源:https://blog.csdn.net/ncnfjdjjd/article/details/135708674
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。