0
1

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 5 years have passed since last update.

AtCoderBeginnerContest172復習&まとめ(前半)

0
Posted at

AtCoder ABC172

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

A問題 Calc

問題文
整数$a$が入力されます。値$a+a^2+a^3$を出力してください。

abc172a.py
a = int(input())
print(a + a**2 + a**3)

B問題 Minor Change

問題文
文字列$S,T$が与えられます。次の操作を繰り返して$S$を$T$に変更するとき、操作回数の最小値を求めてください。
操作:$S$の$1$文字を選んで別の文字に書き換える

for文で前から一文字ずつ合っているかどうか確認しました.

abc172b.py
s = input()
t = input()
count = 0
for i in range(len(s)):
    if s[i] != t[i]:
        count +=1
print(count)

C問題 Tsundoku

問題文
二台の机 A, B があります。机 A には$N$冊の本が、机 B には$M$冊の本が、それぞれ縦に積まれています。
机 A に現在上から$i$番目に積まれている本$(1 \leq i \leq N)$は読むのに$A_i$分を要し、机 B に現在上から$i$番目に積まれている本$(1 \leq i \leq M)$は読むのに$B_i$分を要します。
次の行為を考えます。
 ・本が残っている机を選び、その机の最も上に積まれた本を読んで机から取り除く。
合計所要時間が$K$分を超えないようにこの行為を繰り返すとき、最大で何冊の本を読むことができるでしょうか。本を読むこと以外に要する時間は無視します。

とりあえず,再帰で解こうと思いましたが,実行時間に引っかかるのが明らかだったので,いろいろ工夫を凝らしてコード書きました.
解説にpythonの参考コード載ってて,こんなにシンプルに書けるようになりたいなと思いました.

abc172c.py
n, m, k = map(int, input().split())
a_list = list(map(int, input().split()))
b_list = list(map(int, input().split()))
new_a_list = [[0, 0]]
a_sum = 0
for i in range(0, n):
    a_sum += a_list[i]
    if a_sum <= k:
        new_a_list.append([i + 1, a_sum])
    else:
        break
best = len(new_a_list) - 1
b_sum = 0
a_sum = new_a_list[-1][1]
a_count = new_a_list[-1][0]
flag = 1
for i in range(0, m):
    b_sum += b_list[i]
    while True:
        if b_sum <= k - a_sum:
            if best < i + 1 + a_count:
                best = i + 1 + a_count
            break
        if a_count == 0:
            flag = 0
            break
        a_count -= 1
        a_sum = new_a_list[-(len(new_a_list) - a_count)][1]
    if flag == 0:
        break
print(best)

D問題 Sum of Divisors

問題文
正整数$X$に対し、$X$の正の約数の個数を$f(X)$とします。
正整数$N$が与えられるので、$\sum_{K=1}^{N}K×f(K)$を求めてください。

圧倒的数学力不足(汗)
解けなかったので,解説見て書いてあることそのまま実装したら解けました.

abc172d.py
n = int(input())
total = 0
for j in range(1, n + 1):
    x = j
    y = n // x
    total += y * (y + 1) * x // 2
print(total)

実装はシンプルだけど思いつかなかったし,そもそも実行時間制限: 3 sec 見落としてた.(見落としてなくても解けないと思うけど)

前半はここまでとなります.
前半の最後まで読んでいただきありがとうございました.

後半はEF問題の解説となりますが,時間的に記事作成できないと思います(汗).

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?