# 中秋 ## 题目描述 中秋晚会学校的社团组织表演节目,学校一共有m个大厅,每个大厅一个天可以表演一个节目,现在有n个社团,社团的表演顺序确定,其中第i个社团要表演的活动数量为wi,开始时1到m个社团各占用一个大厅,当某个社团j表演完所有节目之后,下一个排队的社团就会接受社团j的位置开始表演,即第j个社团在第x天结束表演,则k社团第x+1天开始表演,若表演社团数量n小于m,则m-n个大厅关闭,现在给出n个社团的表演节目数量,按照上述规则,所有节目表演完需要多少天 ## 输入格式 第 1 行 2 个整数 n 和 m,用一个空格隔开,分别表示社团数和大厅个数。 第 2 行 n 个整数 w1、w2、……、wn,每两个整数之间用一个空格隔开,wi表示 i 号社团的节目量。 ## 输出格式 一个整数表示所需的总天数。 ## 样例 #1 ### 样例输入 #1 ``` 5 3 4 4 1 2 1 ``` ### 样例输出 #1 ``` 4 ``` ## 提示 1 ≤ n ≤ 10000,1 ≤ m ≤ 100 且 m≤ n; 1 ≤ wi ≤ 100。
时间: 2024-04-15 18:24:45 浏览: 92
这是一个关于中秋晚会表演节目安排的问题。给定社团数量n、大厅数量m以及每个社团的节目数量,要求计算所有节目表演完所需的总天数。
根据题目描述,可以通过模拟的方式来解决这个问题。首先,初始化一个长度为m的数组,表示每个大厅剩余的节目数量。然后,按照社团的顺序进行循环,对于每个社团,找到当前剩余节目数最少的大厅,将该社团的节目安排在该大厅,并更新大厅的剩余节目数量。如果有多个大厅的剩余节目数量相同,则选择编号最小的大厅。
以下是一种可能的实现方式:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> halls(m, 0); // 初始化每个大厅的剩余节目数量为0
int totalDays = 0; // 记录总天数
for (int i = 0; i < n; i++) {
int w;
cin >> w;
int minHall = 0; // 记录当前剩余节目数最少的大厅编号
for (int j = 1; j < m; j++) {
if (halls[j] < halls[minHall]) {
minHall = j;
}
}
halls[minHall] += w; // 将当前社团的节目安排在剩余节目数最少的大厅
totalDays = max(totalDays, halls[minHall]); // 更新总天数
}
cout << totalDays << endl;
return 0;
}
```
通过循环遍历每个社团并更新大厅的剩余节目数,同时记录最大的剩余节目数,即可得到所有节目表演完所需的总天数。
希望这可以帮助到你!如果还有其他问题,请随时提问。
阅读全文