题目描述

暴雨过后,FJ的农场到镇上的公路上有一些泥泞路,他有若干块长度为L的木板可以铺在这些泥泞路上,问他至少需要多少块木板,才能把所有的泥泞路覆盖住。

输入输出格式

输入格式:

第一行为正整数n(≤10000)和L(≤10000),分别表示有多少段泥泞路和木板的长度;接下来n行,每一行两个整数s和e(s≤e≤10^9),表示每一段泥泞路的起点和终点。

输出格式:

仅一个正整数,表示木板数。

输入输出样例

输入样例#1: 
3 3
1 6
13 17
8 12
输出样例#1: 
5
 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;

int n,len;
int sum;
int max(int x,int y)//手写max
{
	return x > y ? x : y;
}
struct node//定义一个结构体,用来存储每一段路的开始与结束点
{
	int begin;
	int end;
}p[10003];
int cmp(node x,node y)//排序条件
{
	return x.begin < y.begin;
}
int main()
{
	scanf("%d %d",&n,&len);
	for (int i=1;i<=n;i++)
	{
		scanf("%d %d",&p[i].begin,&p[i].end);
	}
	sort(p + 1, p + 1 + n, cmp);
	int j = p[1].begin;//j的值是第一段路开始的节点值
	for (int i=1;i<=n;i++)//为每一条路铺木板
	{
		while (j < p[i].end)//在一段路里面铺木板
		{
			j += len;//加上一块木板
			sum++;//木板的数目加一
		}
		//将木板铺到路上,木板的末尾是下一段路的开始
		j = max(j, p[i + 1].begin);
	}
	printf("%d",sum);
}
 
 
01-15 12:50