P1589 泥泞路
题目描述
暴雨过后,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<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 10010 using namespace std; int n,l,x,y,s,ans; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } struct Node { int x,y; }node[N]; int cmp(Node a,Node b) {return a.x<b.y;} int main() { n=read(),l=read(); for(int i=1;i<=n;i++) { node[i].x=read(); node[i].y=read(); } sort(node+1,node+1+n,cmp); x=node[1].x,y=node[1].y; for(int i=2;i<=n;i++) { if(node[i].x<=y) y=node[i].y; else { s=ceil(1.0*(y-x)/l); ans+=s; x=max(x+s*l,node[i].x),y=node[i].y; } } s=ceil(1.0*(y-x)/l),ans+=s; printf("%d",ans); return 0; }
时间: 2024-10-02 05:25:57