けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 207 A - Repression (灰色, 100 点)

頭を柔らかくして考えよう。

問題概要

3 個の整数  A, B, C から 2 個選んで和をとる。

この和の最大値を求めよ。

解法

3 個の整数  A, B, C から 2 個選んだ和は

  •  A + B
  •  B + C
  •  C + A

の 3 通りがある。これらの最大値を求めればよい。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int A, B, C;
    cin >> A >> B >> C;
    cout << max({A + B, B + C, C + A}) << endl;
}

AtCoder ABC 206 A - Maxi-Buying (灰色, 100 点)

出力がややこしい......

問題概要

税抜価格が  N 円の品物に対して、消費税 8% を乗せた税込価格と 206 円との大小比較をせよ。

(出力形式はリンク先から)

解法

税込価格は (int)(1.08 * N) で求めることができる。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    
    int teika = (int)(1.08 * N);
    if (teika < 206)
        cout << "Yay!" << endl;
    else if (teika == 206)
        cout << "so-so" << endl;
    else
        cout << ":(" << endl;
}

AtCoder ABC 205 A - kcal (灰色, 100 点)

算数ではよくある「比」の問題

問題概要

100mL あたり  A kcal のドリンクがある。

 B mL で何 kcal でしょうか?

解法

求めるカロリーを  x kcal とする。比で表すと、次のようになる。

 100 : A = B : x

内項の積と外項の積は等しいから、

 100x = AB

よって、

 x = \displaystyle \frac{AB}{100}

と求められる。

今回は浮動小数点型で計算しよう。出力するときも、小数点以下ある程度出すようにしよう。

#include <bits/stdc++.h>
using namespace std;

int main() {
    double A, B;
    cin >> A >> B;
    double res = A * B / 100;
    cout << fixed << setprecision(10) << res << endl;
}

AtCoder ABC 204 A - Rock-paper-scissors (灰色, 100 点)

ジャンケンの問題。何気に将来非常によく出てくる構造を問う問題でもある。

問題概要

3 人でジャンケンをしたらあいこになった。3 人のうちの 2 人の出した手がわかっている。残り 1 人の手を答えよ。

なお、0 はグー、1 はチョキ、2 はパーを表す。

解法

0, 1, 2 のいずれかであるような 3 つの数  x, y, z

  •  x = y = z
  •  x, y, z がすべて互いに相異なる

という条件を満たすとき、2 つの値が決まれば残り 1 つが自動的に決まる。この考え方、より難しい問題で結構出てくる。

ここでは、素直に考えよう。

  •  x = y のとき、もう 1 人の手もそれらと同じなので  x を答えればよい。
  • そうでないとき、3 人の出した手を集めると 0, 1, 2 になるので、 3 - x - y を答えればよい。
#include <bits/stdc++.h>
using namespace std;

int main() {
    int x, y;
    cin >> x >> y;
    if (x == y)
        cout << x << endl;
    else
        cout << 3 - (x + y) << endl;
}

AtCoder ABC 203 A - Chinchirorin (灰色, 100 点)

慎重に場合分けしよう!

問題概要

3 個の整数  a, b, c が与えられる。

これらのうち 2 個が等しい場合には、残りの 1 個の整数を答えよ。

3 個すべて互いに相異なる場合には、0 と答えよ。

解法

3 個の整数  a, b, c のうち、2 個が等しいというのは、次の 3 パターンが考えられる。3 個すべて等しい場合もあるが、次の 3 パターンのいずれかとみなして差し支えない。

  • a == b であるとき (答えは c)
  • b == c であるとき (答えは a)
  • a == c であるとき (答えは b)

このいずれでもない場合には、0 を出力すればよい。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a, b, c;
    cin >> a >> b >> c;
    if (a == b)
        cout << c << endl;
    else if (b == c)
        cout << a << endl;
    else if (a == c)
        cout << b << endl;
    else
        cout << 0 << endl;
}