题解:P14842 [ICPC 2022 Yokohama R] Hasty Santa Claus

这题我们可以轻松看出是一个贪心。

根据贪心的思想可以很轻松的写出代码

我们将每个房屋按其可拜访时间区间的结束时间升序排序,如果结束时间相同则按开始时间升序排序。然后依次为每个房屋分配一个可用的日期,确保每天分配的房屋数不超过上限 \(k\)。由于保证存在解,该算法总能找到一个可行解。

AC 代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 1000 + 5;
int n, k, ans[N], days[32];
struct inv{
	int b, e, k;
}a[N];
bool cmp(inv x,inv y) {
	return x.e < y.e;
}
int main() {
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> a[i].b >> a[i].e;
        a[i].k = i;
	}
	sort(a + 1, a + n + 1, cmp);
    for (int i = 1; i <= 31; i++) {
        days[i] = k;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = a[i].b; j <= a[i].e; j++) {
            if (days[j] != 0) {
                days[j]--;
                ans[a[i].k] = j;
                break;
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        cout << ans[i] << endl;
    }
	return 0;
}

多好的代码,时间复杂度为 $\Theta \left ( n\log n \right ) $,符合此题时限。

::::info[提示]
本题解使用了 Deepseek 进行润色。
::::

posted @ 2026-02-24 17:32  Python_enjoy  阅读(2)  评论(0)    收藏  举报