0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoderログ:0120 - ABC 092 B

Posted at

問題

問題文

ある合宿におやつとしてチョコレートが何個か準備されました。合宿は $N$ 人が参加して $D$ 日間行われました。$i$ 人目の参加者 $(1 \le i \le N)$ は合宿の $1,A_i
+1,2A_i+1,\ldots$ 日目にチョコレートを $1$ 個ずつ食べました。その結果、合宿終了後に残っていたチョコレートは $X$ 個となりました。また、合宿の参加者以外がチョコレートを食べることはありませんでした。
合宿開始前に準備されていたチョコレートの個数を求めてください。

制約

・$1 \le N \le 100$
・$1 \le D \le 100$
・$1 \le X \le 100$
・$1 \le A_i \le 100~(1 \le i \le N)$

収録されている問題セット

回答

回答1 (AC)

$i$ 人目の参加者は合宿の $1,A_i+1,2A_i+1,\ldots$ 日目にチョコレートを $1$ 個ずつ食べるので、合宿全体で食べたチョコレートの個数は $\lceil D/A_i \rceil$ 個となります。ここで $\lceil x \rceil$ は実数 $x$ の小数点切り上げを表します (天井関数)。この個数を $i$ について合計すれば全員が食べたチョコレートの合計数になるので、合宿開始前に準備されていたチョコレートの個数はこれに $X$ 個を加えた個数となります。コードは以下のようになりました。

abc092b-1.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int n, d, x;
  cin >> n >> d >> x;

  vector<int> a(n);
  for ( int i=0; i<n; i++ ) {
    cin >> a.at(i);
  }

  int eaten = 0;
  for ( int i=0; i<n; i++ ) {
    eaten += ceil((float)d/a.at(i));
  }

  cout << x+eaten << endl;
}

回答2 (AC)

回答1のコードをちょっとだけ改良します。改良1のコードは i に関するループが2回ありますが、今回はまとめることが可能です。コードは以下のようになりました。

abc092b-2.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int n, d, x;
  cin >> n >> d >> x;

  int a;
  for ( int i=0; i<n; i++ ) {
    cin >> a;
    x += ceil((float)d/a);
  }

  cout << x << endl;
}

調べたこと

AtCoder の解説コンテスト全体の解説

回答1と同じ方針でした。

リンク

前後の記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?