AtCoder Beginner Contest 045

胖柚の工作室發表於2024-08-16

A - Trapezoids

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	int a, b, h;
	cin >> a >> b >> h;
	cout << (a + b) * h / 2;
	return 0;
}

B - Card Game for Three (ABC Edit)

\(p[]\) 為當前牌堆頂指標。
\(\rm k\) 記錄當前要從哪個牌堆抽牌(因為Alice先開始,所以初值為0)

看當前牌堆頂指標是否已經指到 \(len[k]\) 處,如果是則說明當前牌堆已空。
否則的話就把 \(k\) 指向當前牌堆頂的字母所指的牌堆,同時當前牌堆頂指標後移一位

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int p[3];

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	string s[3];
	cin >> s[0] >> s[1] >> s[2];
	int len[3];
	len[0] = s[0].size(), len[1] = s[1].size(), len[2] = s[2].size();
	int k = 0;
	while (1) {
		if (p[k] == len[k]) {
			cout << char(k + 'A');
			break;
		}
		k = s[k][p[k]++] - 'a';//這裡 p[k]++ 必須寫在裡面,否則k更新後再改變的就是新牌堆的堆頂指標了
	}
	return 0;
}