n 對新人舉辦婚禮,牧師需在每場婚禮中主持儀式,儀式佔用婚禮時間的一半以上且不可中斷。給定每場婚禮開始/結束時間,問牧師能否參加所有儀式。
d = (end-start)/2 + 1。cur。遍歷婚禮:cur + d_i ≤ end_i 且 cur ≥ start_i → 在 cur 開始儀式,cur += d_i。cur < start_i → 等到 start_i 開始,cur = start_i + d_i。#include
#include
using namespace std;
struct Wedding { int s, t, d; } w[100005];
int n;
bool cmp(Wedding a, Wedding b) { return a.s + a.d < b.s + b.d; }
bool check() {
int cur = w[0].s;
for (int i=0; i= w[i+1].s && finish + w[i+1].d <= w[i+1].t) cur = finish;
else if (finish < w[i+1].s) cur = w[i+1].s;
else return false;
}
return true;
}
int main() {
while (scanf("%d", &n) && n) {
for (int i=0; i
s + d(儀式最早結束時間),保證盡早騰出時間給後續婚禮。