题解: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 进行润色。
::::

浙公网安备 33010602011771号