zoukankan      html  css  js  c++  java
  • 【2043】校门外的树

    Time Limit: 20 second
    Memory Limit: 20 MB

    问题描述:
    某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看做一个数轴,马路的一端在数轴的0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,3,4…,L都种有一棵树。由于马路上有一些区域要用来建地铁,这些区域用他们在数轴上的起点和终点标志。已知,任意区域的起点和终点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域两端的端点两棵树)都移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。(只考虑单向)。

    Input

    第一行包含两个整数L(1<=L<=10000)和M(1<=M<=100)。 L代表马路的长度,M代表区域的数目,L和M之间用空格隔开;
    接下来的M行,每行包含两个不同的整数,用一个空格隔开,表示一个区域的起点和终点坐标。

    Output

    输出文件包括一行,这一行包括一个整数,表示马路上剩余的树的数目。

    Sample Input

    500 3 
    
    150 300
    
    100 200
    
    470 471
    
    
    

    Sample Output

    298

    【题解】

    用一个bool数组来表示路,true和false用于标记树的状态。根据输入的区间for 一下置相应区间的bool数组为false。最后再for一遍路的长度,记录一下树的数目就好.

    【代码】

    #include <cstdio>
    
    const int MAXL = 10000+10;
    
    int l,m,number=0;
    bool a[MAXL];
    
    void input_data()
    {
    	scanf("%d %d",&l,&m);
    	for (int i = 0;i <= l;i++)  //初始化一下路上的树的状态 
    		a[i]=true;
    	for (int i = 1;i <= m;i++) //输入一个区间 并从左到右修改树的状态 
    		{
    			int l,r;
    			scanf("%d %d",&l,&r);
    			for (int j = l;j <= r;j++)
    				a[j] = false;
    		}
    }
    
    void get_ans()
    {
    	for (int i= 0;i <= l;i++) //最后再扫描一遍,记录树的总棵数 
    		if (a[i]) number++;	
    }
    
    void output_ans()
    {
    	printf("%d",number);	
    }
    
    int main()
    {
    	input_data();
    	get_ans();
    	output_ans();
    	return 0;	
    }
    


     

  • 相关阅读:
    被.net郁闷的一天
    使用批处理出现奇怪的现象
    我们应该更相信ghost
    asp.net设置默认按钮的一种方法(041217更新)
    asp中access到sql server导入升级后要做的工作。
    一种简单方便的权限控制方案
    为何我的本本不能打开休眠功能?
    祝贺自己的blog开张
    sql server中分页获取数据的存储过程
    httpcompress实际效果能有多少?
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632506.html
Copyright © 2011-2022 走看看