P1589 泥泞路
题目描述
暴雨过后,FJ的农场到镇上的公路上有一些泥泞路,他有若干块长度为L的木板可以铺在这些泥泞路上,问他至少需要多少块木板,才能把所有的泥泞路覆盖住。
输入输出格式
输入格式:
第一行为正整数n(≤10000)和L(≤10000),分别表示有多少段泥泞路和木板的长度;接下来n行,每一行两个整数s和e(s≤e≤10^9),表示每一段泥泞路的起点和终点。
输出格式:
仅一个正整数,表示木板数。
输入输出样例
输出样例#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);
}

浙公网安备 33010602011771号