AtCoder Beginner Contest 100

ABC-の3完です. 緑到達, 初水色パフォーマンスなど嬉しい回だった.

A - Happy Birthday!

互い違いにケーキを取るとするとどちらも最大8個なので, どちらかが8個を超えていれば":(", それ以外は"Yay!".

#include <bits/stdc++.h>

using namespace std;

int main(void) {
  int a, b;
  cin >> a >> b;

  if(a <= 8 && b <= 8) {
    cout << "Yay!" << endl;
  }
  else {
    cout << ":(" << endl;
  }
}

B - Ringo's Favorite Numbers

基本的にはn*(100^d)を出力すればよいが, n==100の場合だけ100^(d+1)で割り切れる数となってしまうので注意が必要(1WA).

#include <bits/stdc++.h>

using namespace std;

int main(void) {
  int d, n;
  cin >> d >> n;

  int tmp;
  if(d == 0) {
    tmp = 1;
  }
  else if(d == 1){
    tmp = 100;
  }
  else {
    tmp = 10000;
  }

  if(n == 100) {
    n++;
  }

  cout << tmp * n << endl;
}

C - *3 or /2

3倍して大きくなる分にはいつでも整数なのでこちらは気にせず, 2で割る操作のみを考えればよい.1つの要素だけ2倍して残りの要素を3倍すると操作回数は最大になる. 配列の要素それぞれを2で割って回数を数えて出力する.

#include <bits/stdc++.h>

using namespace std;

int main(void) {
  int n;
  cin >> n;
  vector <int> a(n);
  for(int i = 0; i < n; i++) {
    cin >> a[i];
  }

  int count = 0;
  for(int i = 0; i < n; i++) {
    while(a[i] % 2 == 0) {
      a[i] /= 2;
      count++;
    }
  }

  cout << count << endl;
}

D - Patisserie ABC

なんにもわからなかった. editorial見て解いただけ.

長い時間書きかけで放っておいたせいでDのときどんなこと考えたか忘れた.