B3963 [语言月赛 202404] 吃苹果 题解
Maxmilite
·
·
题解
Source & Knowledge
2024 年 4 月语言月赛,由洛谷网校入门计划/基础计划提供。
题目大意
## 题目分析
使用擂台法。建立两个变量 $mx, mi$,分别代表当前取到的最大值和最小值。之后使用 `for` 循环读入,每次读入一个 $x$,就将其与 $mx, mi$ 分别比较并替换。
```cpp
int mx = -2000000000, mi = 2000000000; // 最大值擂台初始时要很小,反之亦然
for (int i = 1; i <= n; ++i) {
int x;
cin >> x;
if (x > mx) mx = x;
if (x < mi) mi = x;
}
```
最终输出 $mx + mi$ 即可。但是需要注意的是,最坏情况下,$mx + mi$ 可以达到 $4 \times 10^9$,会导致 `int` 溢出。一种很简单的解决方式是,将 $mx, mi$ 改为 `long long` 类型。
```cpp
long long mx = -2000000000, mi = 2000000000;
for (int i = 1; i <= n; ++i) {
...
}
cout << mx + mi << endl;
```
## 视频讲解
