【競プロ精進ログ】ABC139-B

zuka

ABCをコツコツ解いていきます。

本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために,積極的にアウトプットしていく作戦です。これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。

目次

本記事の概要

Atcoderで初心者用のコンテストとして開催されているAtcoder Beginner Contest(通称ABC)を解いていくものです。今回はABC139-B「Power Socket」です。

ポイント

while文を回せますかという問題でした。今回はwhile (true)として差込口が必要な数を超えたときにbreakするようにしました。

おさえるべき内容

 while 文における条件に基づくbreak

実装

#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define repi(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
using namespace std;

int main(){
  int A, B;
  cin >> A >> B;
  int sum = 0;
  int cnt = 0;
  while (true){
    sum = cnt * A - cnt + 1;
    // 差込口がB以上のときwhileを抜け出す
    if (sum >= B) break;
    cnt++;
  }
  cout << cnt << endl;
}

別解

電源タップ1つあたり$A-1$個の差込口が増え,結果として$B-1$個の差込口を増やしたいと考えれば,以下のように天井関数を用いて解答することもできます。

\begin{align}
\left\lceil\frac{B-1}{A-1}\right\rceil
\end{align}

天井関数の実装は,以下の記事をご覧ください。

#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define repi(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
using namespace std;

// 天井関数
int my_ceil(int a, int b){
  return (a + b - 1) / b;
}

int main(){
  int A, B;
  cin >> A >> B;
  cout << my_ceil(B-1, A-1) << endl;
}
よかったらシェアしてね!

コメント

コメントする

目次
閉じる