[AtCoder]ABC 100A – Happy Birthday! ~ 103[C++]

プログラミング

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にしたところで、最小値は変わりません。

タイトルとURLをコピーしました