A - Fighting over Candies
简单排序。
#include <bits/stdc++.h>using namespace std;
using i64 = long long;int main() {ios::sync_with_stdio(false), cin.tie(nullptr);vector<int> a(3);cin >> a[0] >> a[1] >> a[2];sort(a.begin(), a.end());if (a[2] == a[0] + a[1]) cout << "Yes";else cout << "No";return 0;
}
B - Snuke's Coloring 2 (ABC Edit)
如果着眼于计算被涂黑部分的面积就不利于计算。就本题而言应该直接去计算余下的白色面积。这就需要端点坐标。
分类讨论:当 \(a\) 分别取值的时候,边界的端点值会被更新(上一次涂黑的可能会被本次覆盖),不断更新端点值,最后根据矩形面积公式计算。
#include <bits/stdc++.h>using namespace std;
using i64 = long long;int main() {ios::sync_with_stdio(false), cin.tie(nullptr);int W, H, N;cin >> W >> H >> N;int a1 = 0, a2 = W, a3 = 0, a4 = H;for (int i = 0; i < N; i++) {int x, y, a;cin >> x >> y >> a;if (a == 1) {a1 = max(a1, x);} else if (a == 2) {a2 = min(a2, x);} else if (a == 3) {a3 = max(a3, y);} else {a4 = min(a4, y);}}if (a2 <= a1 || a4 <= a3) cout << 0;else cout << (a2 - a1) * (a4 - a3);return 0;
}
C - 1D Reversi
通过在草稿纸上模拟可以看出,答案即为字符串相邻字符不相同的个数。
举例:对于 WBBW,在最右边增加 B,变为 WBBBB,只需在左侧再加上一个 B 即可。也即每次增加的字符,都是把相邻的不同字符更改为相同。
#include <bits/stdc++.h>using namespace std;
using i64 = long long;int main() {ios::sync_with_stdio(false), cin.tie(nullptr);string s;cin >> s;int ans = 0;for (int i = 1; i < s.size(); i++) {if (s[i] != s[i - 1]) ans++;}cout << ans;return 0;
}
D - An Invisible Hand
本题难在理解题意。以样例三为例。
得到最高利润的方式有多种,可以是 \(9-4=5,\) 也可以是 \(8-3=5\)。
因此只需要统计有几组这样的最高利润即可,答案就是组数。
对数组遍历,用 \(b[i]\) 记录在当前城市出售苹果所能得到的最高利润,\(minn\) 表示前 \(i-1\) 个城市中的最小值,不断更新 \(maxm\) 得到最高利润。
再遍历一遍,但凡 \(b[i]\) 与 \(maxm\) 相等就将答案计数 + 1.
#include <bits/stdc++.h>using namespace std;
using i64 = long long;int main() {ios::sync_with_stdio(false), cin.tie(nullptr);int N, T;cin >> N >> T;vector<int> a(N), b(N);int minn = 0x3f3f3f3f, maxm = -0x3f3f3f3f;for (int i = 0; i < N; i++) {cin >> a[i];b[i] = a[i] - minn;minn = min(minn, a[i]);maxm = max(maxm, b[i]);}int ans = 0;for (int i = 0; i < N; i++) {if (b[i] == maxm) ans++;}cout << ans;return 0;
}