题目描述
暴雨过后,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); }