题目链接:https://vjudge.net/contest/194475#problem/C
题目大意:
有n滩泥 木板长度为L 求至少需要多少木板才能覆盖这些泥
解题思路:
把泥块的起点升序排序,分三种情况讨论
1、前一个木板完全覆盖了当前的泥 跳过
2、前一个木板覆盖了一部分 则计算铺完剩下的泥需要多少木板
3、前一个木板完全没接触到当前的木板 则更新端点
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; #define MAXN 10000+100 typedef struct { int s, e; }node; node a[MAXN]; bool cmp(node a, node b) { return a.s < b.s; } int main() { int n, l; scanf("%d %d", &n, &l); for (int i = 0; i < n; i++) scanf("%d %d", &a[i].s, &a[i].e); sort(a, a + n, cmp); int ans = 0; int last = -1; for (int i = 0; i < n; i++) { if (last >= a[i].e) continue; if (last > a[i].s) { int num = ceil((a[i].e - last)*1.0 / l); //向上取整函数 last += num * l; ans += num; } else { int num = ceil((a[i].e - a[i].s)*1.0/l); last = a[i].s + num * l; ans += num; } } printf("%d ", ans); return 0; }
2018-04-21