4479: 校门外好多树

题目描述

题目描述

某校大门外长度为 LL 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。

我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 LL 的位置;数轴上的每个整数点,即 0,1,2,…,L0,1,2,…,L 都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在这些区域中的树(包括区域端点处的树)已经被移走了。

如果我们把所有间隔为 11 的树连接起来,那么显然剩下的所有树被分割成了很多段。如果某段包含了大于等于 xx 棵树,33DAI 就可以在这一段树下睡觉。请问 33DAI 有多少位置可以睡觉。

输入

第一行有三个整数 LL、MM、xx,(MM 代表区域的数目,L,xL,x 的含义如题目描述所述)。

接下来的 MM 行每行包含两个不同的整数,第 ii 行为第 ii 个区域的起始点和终止点的坐标 li,rili​,ri​ 。

输出

包括一行,这一行只包含一个整数,表示 33DAI 有多少位置可以睡觉。

输入1:

19 4 3
8 10
1 2
7 9
13 16

输出1:

2

样例解释

<img src="../upload//20240628//4479_1_20240628192311_57418.jpg" width=600> 如图,样例 1 中,剩下的树被分为了四段,长度分别为 1,4,2,31,4,2,3,有两段满足长度大于等于 x(3)x(3),所以输出 22。

数据范围

对于 100%100% 的数据,保证 1≤x,L≤50001≤x,L≤5000,1≤M≤1001≤M≤100,0≤li≤ri≤L0≤li​≤ri​≤L。

  • 子任务 1(30 分):保证 x=1x=1
  • 子任务 2(30 分):保证 li=rili​=ri​
  • 子任务 3(40 分):没有特殊的限制。
    #include<bits/stdc++.h>
    using namespace std;
    bool array_y[5010];
    int main()
    {
    	int x,l,m,cnt1=0,cnt2=0;
    	cin>>l>>m>>x;
    	for(int i=1;i<=m;i++){
    		int a,b;
    		cin>>a>>b;
    		for(int j=a;j<=b;j++)array_y[j]=1;
    	}
    	
    	for(int i=0;i<=l;i++){
    		if(array_y[i]==0){
    			cnt1++;
    		}else{
    			if(cnt1>=x)cnt2++;
    			cnt1=0;
    		}
    	} 
    	if(cnt1>=x){
    		cnt2++;
    	}
    	cout<<cnt2;
        return 0;
    
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值