【AtCoder】ABC340解説(Python)

鹿島建設プログラミングコンテスト2024(AtCoder Beginner Contest 340)の解説記事です。

目次

ABC340 A – Arithmetic Progression

問題

問題文の要約は以下の通りです。

問題の要約

初項が \(A\) 、末項が \(B\) 、公差が \(D\) であるような等差数列を出力せよ。

制約

・\(1 \le A \le B \le 100\)
・\(1 \le D \le 100\)
・初項が \(A\) 、末項が \(B\) 、公差が \(D\) であるような等差数列が存在する
・入力は全て整数

入力

\(A\) \(B\) \(D\)

出力

初項が \(A\) 、末項が \(B\) 、公差が \(D\) であるような等差数列の項を順に空白区切りで出力せよ。

解説

while文を使用する。

解説

\(A\), \(B\), \(D\) をint型として受け取ります。

# 入力
A,B,D=map(int,input().split())

\(A \lt B\) の間は公差を足して出力します。

# A<Bの間は公差を足して出力
while A<B:
  print(A,end=' ')
  A+=D

最後に末項を出力します。

# 最後に末項を出力
print(B)

解答

# 入力
A,B,D=map(int,input().split())

# A<Bの間は公差を足して出力
while A<B:
  print(A,end=' ')
  A+=D
# 最後に末項を出力
print(B)

ABC340 B – Append

問題

解説

リストを使用してクエリを処理する。

解説

次に入力 \(Q\) をint型として受け取ります。

# 入力
Q=int(input())

空の数列をlistで用意します。

# 数列
A=[]

\(Q\) 回クエリを処理します。
リストの末尾に追加するにはappend、後ろからk番目の値を求めるにはA[-k]とします。

# Q回クエリを処理する
for _ in range(Q):
  t,k=map(int, input().split())
  # 末尾にkを追加する
  if t==1:
    A.append(k)
  # 後ろからk番目の値を求める
  else:
    print(A[-k])

解答

# 入力
Q=int(input())
# 数列
A=[]

# Q回クエリを処理する
for _ in range(Q):
  t,k=map(int, input().split())
  # 末尾にkを追加する
  if t==1:
    A.append(k)
  # 後ろからk番目の値を求める
  else:
    print(A[-k])

ABC340 C – Divide and Divide

問題

解説

メモ化再帰を用いる。

解説

メモ化再帰を行うことで入力が同じ関数を何回も呼び出さなくなるため、高速に処理できます。

メモ化再帰を行うにはfunctools.cacheのimportを行い、@cache というデコレータを付けることで自動的に行われます。

from functools import cache

# 入力
Q=int(input())

解答

from functools import cache

# メモ化再帰
@cache
def erase(N):
  # 1の時は処理終了
  if N==1:
    return 0
  # 2 個の整数を黒板に書き、N円支払う
  else:
    return erase(N // 2) + erase((N + 1) // 2) + N

# 入力
N=int(input())
# 出力
print(erase(N))
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次