CC Hotel 客房分配:最小化愤怒值 - C++ 代码实现
CC Hotel 客房分配:最小化愤怒值 - C++ 代码实现
小 C 开了一家叫做 CC Hotel 的酒店,一天来了 'n' 位客人。CC Hotel 有一层楼,共有 'm' 间空房间,这些房间形成一个环形,即第 'x' 间房间与第 '(x mod m + 1)' 间房间相邻。
这些客人十分挑剔,他们希望与自己房间相邻的房间没有人住。如果一位客人的房间旁边有 'k' 间房间有人住,那么这位客人的愤怒值为 'k'。
你需要帮助小 C 安排房间,使得所有客人的愤怒值之和最小,并输出这个最小值。
C++ 代码实现
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> rooms(m);
for (int i = 0; i < m; i++) {
cin >> rooms[i];
}
sort(rooms.begin(), rooms.end());
int totalAnger = 0;
for (int i = 0; i < n; i++) {
totalAnger += rooms[i];
}
cout << totalAnger << endl;
return 0;
}
代码解释
- 输入: 从标准输入中读取客人数 'n' 和房间数 'm',以及每个房间的愤怒值。
- 排序: 使用
sort函数将房间的愤怒值按照升序排列。 - 计算总愤怒值: 循环遍历前 'n' 个房间,将他们的愤怒值累加到
totalAnger中。 - 输出: 将
totalAnger打印到标准输出。
工作原理
由于房间形成环形,分配房间的最佳策略是将愤怒值最低的房间分配给相邻的房间,以此类推。排序后,前 'n' 个房间的愤怒值是最小的,所以将他们分配给相邻的房间可以最小化总愤怒值。
注意事项
- 该代码假设输入的房间愤怒值都是非负整数。
- 如果房间数量小于客人数,则无法满足所有客人的要求。
- 由于房间形成环形,需要考虑房间之间的循环关系。
总结
本代码使用简单的排序和累加操作,有效地解决了 CC Hotel 客房分配问题,最小化了所有客人的愤怒值之和。
原文地址: https://www.cveoy.top/t/topic/qvUp 著作权归作者所有。请勿转载和采集!