zoukankan      html  css  js  c++  java
  • 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1107:校门外的树

    时间限制: 1000 ms 内存限制: 65536 KB
    提交数: 11290 通过数: 6162

    【题目描述】

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

    【输入】

    第一行有两个整数L(1 ≤ L ≤ 10000)和 M(1 ≤ M ≤ 100),
    L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。
    接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
    对于20%的数据,区域之间没有重合的部分;对于其它的数据,区域之间有重合的情况。

    【输出】

    包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

    【输入样例】

    500 3
    150 300
    100 200
    470 471

    【输出样例】

    298

    【来源】

    NO

    代码

    #include <stdio.h>
    int main ()
    {
    	int l,m;
    	scanf("%d %d",&l,&m);
    	int a[m][2];
    	for(int i=0;i<m;i++)
    	{
    		scanf("%d %d",&a[i][0],&a[i][1]);
    	}
    	bool tree[l+1];
    	for(int i=0;i<=l;i++)
    	{
    		tree[i]=true;
    	}
    	for(int i=0;i<m;i++)
    	{
    		int j=a[i][0];
    		while(j<=a[i][1])
    		{
    			if(tree[j])
    			{
    				tree[j]=!tree[j];
    			}
    			j++;
    		}
    	}
    	int count=0;
    	for(int i=0;i<=l;i++)
    	{
    		if(tree[i]) count++;
    	}
    	printf("%d",count);
    	return 0;
    }
    
  • 相关阅读:
    今天试了下lockerz,感觉国外的概念很先进
    十月一日,本人就结婚了,我和老婆选的婚礼主题曲,大家听听
    今天遇到了个奇怪的问题
    第一个博客,第一次随笔
    遇到一个奇葩的问题,could not load the assembly file XXX downloaded from the Web
    Log4net简单使用
    AutoWCFService心跳动态加载服务
    初学Service Broker
    新浪SAE云空间和SVN版本控制
    软件工程导论第一次作业
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12338763.html
Copyright © 2011-2022 走看看