LoginSignup
0
1

More than 3 years have passed since last update.

AtCoderBeginnerContest176復習&まとめ(前半)

Last updated at Posted at 2020-08-25

AtCoder ABC176

2020-08-22(土)に行われたAtCoderBeginnerContest176の問題をA問題から順に考察も踏まえてまとめたものとなります.
前半ではABCまでの問題を扱います.
問題は引用して記載していますが,詳しくはコンテストページの方で確認してください.
コンテストページはこちら
公式解説PDF

A問題 Takoyaki

問題文
高橋君はたこ焼きが好きです。
たこ焼き器を使うと、$1$度に最大で$X$個のたこ焼きを作ることができます。これにかかる時間は作る個数によらず$T$分です。
$N$個のたこ焼きを作るためには何分必要ですか?

解説にもある通り,たこ焼きを焼く回数は,$N/X$を切り上げた回数ですが,そのあたり考えるのや実装が不慣れだったので,提出までの時間早くするためにfor文で書いたものを提出しました.

abc176a.py
n, x, t = map(int, input().split())
for i in range(1, 2 * n):
    if n <= i * x:
        print(i * t)
        break

実際には,無駄なループをするべきではないので以下のようなプログラムが理想だと思います.

abc176a.py
n, x, t = map(int, input().split())
k = (n + x - 1) // x
print(k * t)

B問題 Multiple of 9

問題文
整数$N$が$9$の倍数であることと、$N$を十進法で表したときの各桁の数の和が$9$の倍数であることは同値です。
$N$が$9$の倍数であるか判定してください。

値が大きくならないように,桁の数字を足すごとに,毎回余りを計算していますが,pythonの場合は最後に一回やるだけでも大丈夫でした.

abc176b.py
n = input()
t = 0
for i in range(len(n)):
    t += int(n[i])
    t = t % 9
if t == 0:
    print("Yes")
else:
    print("No")

C問題 Step

問題文
$N$人が$1$列に並んでおり、前から$i$番目の人の身長は$A_i$です。
それぞれの人の足元に、高さが$0$以上の踏み台を設置し、全ての人が次の条件を満たすようにしたいです。
条件:踏み台を込めて身長を比較したとき、自分より前に、自分より背の高い人が存在しない
この条件を満たす時の、踏み台の高さの合計の最小値を求めてください。

二番目の人から順に,前の人より踏み台を込めて身長が低い場合には,前の人と同じ身長になるように踏み台を設置する.
この設置した踏み台の和が答えとなる.

abc176c.py
n = int(input())
a_list = list(map(int, input().split()))
total = 0
for i in range(1, n):
    if a_list[i - 1] > a_list[i]:
        total += a_list[i - 1] - a_list[i]
        a_list[i] = a_list[i - 1]
print(total)

前半はここまでとなります.
夏休み中ですが,論文が条件付き採録になって回答書作りで忙しいため,後半は時間ができたら書きたいと思います.
最後まで読んでいただきありがとうございました.

追記:E問題だけ復習も兼ねて記事にまとめました.AtCoderBeginnerContest176復習&まとめ(後半)

0
1
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
1