小科逛街的时候看到了街头的一家打气球游戏,感觉很有意思,决定回家后自己整一个更有意思的玩法。小科现在准备了一排纸杯,编号从1到n。小科请妈妈帮自己在纸杯上摆放气球,自己来打气球:第1次妈妈会在区间[a1,b1]内的每个杯子上都摆放一个气球,如果杯子上已经有气球,妈妈也会再摆上一个;第2次轮到小科,小科会打爆区间[a2,b2]内的每一个气球;第3次又轮到妈妈在区间[a3,b3]摆放气球。。。如此往复m次,请问这m次玩下来之后,杯子上剩余最多的气球数量是多少?小科一共打爆过多少气球?c++
时间: 2024-02-29 11:51:52 浏览: 121
好的,我可以帮你解决这个问题。我们可以用一个数组 `cups` 来记录每个纸杯上摆放的气球数量。然后按照题目要求模拟 m 次操作,最后遍历整个数组 `cups`,找到其中最大的值即为杯子上剩余最多的气球数量,再统计一下打爆的气球数量即可。下面是具体的 C++ 代码实现:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int cups[n];
fill(cups, cups + n, 0); // 初始化每个杯子上的气球数量为0
int max_count = 0; // 记录杯子上剩余最多的气球数量
int total_broken = 0; // 记录打爆的气球数量
for (int i = 1; i <= m; i++) {
int a, b;
cin >> a >> b;
// 妈妈在区间 [a, b] 内的每个杯子上都摆放一个气球
for (int j = a; j <= b; j++) {
cups[j - 1]++;
max_count = max(max_count, cups[j - 1]);
}
// 小科打爆区间 [a, b] 内的所有气球
for (int j = a; j <= b; j++) {
total_broken += cups[j - 1];
cups[j - 1] = 0;
}
}
cout << max_count << endl; // 输出杯子上剩余最多的气球数量
cout << total_broken << endl; // 输出打爆的气球数量
return 0;
}
```
这个程序首先读入纸杯的数量 `n` 和操作的次数 `m`,然后初始化每个杯子上的气球数量为0。接下来按照题目要求模拟 m 次操作,对于每次操作,先让妈妈在区间 [a,b] 内的每个杯子上都摆放一个气球,然后小科打爆区间 [a,b] 内的所有气球。最后遍历整个数组 `cups`,找到其中最大的值即为杯子上剩余最多的气球数量,再统计一下打爆的气球数量即可。
阅读全文