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;
}

代码解释

  1. 输入: 从标准输入中读取客人数 'n' 和房间数 'm',以及每个房间的愤怒值。
  2. 排序: 使用 sort 函数将房间的愤怒值按照升序排列。
  3. 计算总愤怒值: 循环遍历前 'n' 个房间,将他们的愤怒值累加到 totalAnger 中。
  4. 输出:totalAnger 打印到标准输出。

工作原理

由于房间形成环形,分配房间的最佳策略是将愤怒值最低的房间分配给相邻的房间,以此类推。排序后,前 'n' 个房间的愤怒值是最小的,所以将他们分配给相邻的房间可以最小化总愤怒值。

注意事项

  • 该代码假设输入的房间愤怒值都是非负整数。
  • 如果房间数量小于客人数,则无法满足所有客人的要求。
  • 由于房间形成环形,需要考虑房间之间的循环关系。

总结

本代码使用简单的排序和累加操作,有效地解决了 CC Hotel 客房分配问题,最小化了所有客人的愤怒值之和。

CC Hotel 客房分配:最小化愤怒值 - C++ 代码实现

原文地址: https://www.cveoy.top/t/topic/qvUp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录