ABC 100A – Happy Birthday!
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
int cakes = abs(a - b);
int margin = 16 - (a + b);
if (cakes <= margin) {
cout << "Yay!" << endl;
}else {
cout << ":(" << endl;
}
}
まず、aとbの差をとります。これはお互いに交互にケーキを取っていって、溢れたケーキ分ですね。また、16からaとbの和を引きます。これは、どちらのケーキでもない、余剰分ですね。
溢れた分と余剰分を比べて、溢れたケーキの数が、余剰分以下なら”Yay!”を出力します。
もっとよくする
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if (a <= 8 && b <= 8) {
cout << "Yay!" << endl;
}else {
cout << ":(" << endl;
}
}
そんな難しく考えなくても、条件はもっと簡単に済みます。というより、上の不等式を展開していくと、このようになります。
そもそも、a=8,b=8が成り立つので、a,bが8以下なら成り立ちます。
そして、どちらかが8より大きくなった時点で成り立たなくなります。
ABC 101A – Eating Symbols Easy
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int plus, minus;
plus = count(s.begin(), s.end(), '+');
minus = count(s.begin(), s.end(), '-');
cout << plus - minus << endl;
}
count関数を使って、+と-の数を数えて計算すればいいですね。
ABC 102A – Multiple of 2 and N
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
if (n % 2 == 0) {
cout << n << endl;
}else {
cout << n * 2 << endl;
}
}
入力された値nが2で割り切れたらその数字をそのまま出力して、もし割り切れない(奇数)なら、その値に2をかけたものを出力すればいいです。
ABC 103A – Task Scheduling Problem
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
vector<int> v{a,b,c};
sort(v.begin(), v.end());
cout << v[2] - v[0] << endl;
}
問題文に「任意の1個のタスクをコスト0で完了できます。」と書いてあったりして、一見難しい問題に見えますが、単純に、与えられた3つの値の最大値と最小値の差を求めればいいだけです。
最初、どれをコスト0にするべきかなど色々と考えてしまったのですが、その必要はありませんでした。結局、値の差を見るので、どれをコスト0にしたところで、最小値は変わりません。