AtCoder Beginner Contest 047

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.

image

#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;
}
posted @ 2024-08-22 15:35  胖柚の工作室  阅读(23)  评论(0)    收藏  举报