【AtCoder】ABC346解説(Python)

ユニークビジョンプログラミングコンテスト2024 春(AtCoder Beginner Contest 346)の解説記事です。

目次

ABC346 A – Adjacent Product

問題

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

問題の要約

\(N\) 個の整数 \(A_1, A_2, \cdots , A_N\) が与えられます。 \(B_i = A_i \times A_{i+1}\) \(( 1 \le i \le N-1 )\) と定めたとき、\(B_1, B_2, \cdots , B_{N-1}\) を空白区切りで出力せよ。

解説

print(,end=' ')を用いて出力する。

解説

まず入力を文字列で受け取ります。

# 入力
N=int(input())
A=list(map(int,input().split()))

print(,end=' ')を用いると改行されずに空白' 'が出力されます。

# 空白区切りで出力
for i in range(N-2):
  print(A[i]*A[i+1],end=' ')
# 最後は改行する
print(A[N-2]*A[N-1])

解答

# 入力
N=int(input())
A=list(map(int,input().split()))

# 空白区切りで出力
for i in range(N-2):
  print(A[i]*A[i+1],end=' ')
# 最後は改行する
print(A[N-2]*A[N-1])

ABC346 B – Piano

問題

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

問題の要約

文字列 wbwbwwbwbwbw を無限に繰り返してできる文字列を \(S\) とおきます。\(S\) の部分文字列であって、\(W\) 個の w と \(B\) 個の b からなるものは存在するか判定せよ。

解説

全探索する。

解説

\(S\) の部分文字列はwbwbwwbwbwbw の12文字のいずれかの文字から始まるものなので、この12通りを全探索します。

解答

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

# wbwbwwbwbwbw を200回繰り返した文字列
S='wbwbwwbwbwbw'*200

# 部分文字列をチェック
for i in range(12):
  # 部分文字列S[i:i+W+B]が、ちょうどW個のwを含むとき
  if S[i:i+W+B].count('w')==W:
    # 'Yes'を出力
    print('Yes')
    exit()
# どの部分文字列も条件を満たさなかったとき、'No'を出力
print('No')

ABC346 C – Σ

問題

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

問題の要約

長さ \(N\) の正整数列 \(A=(A_1, A_2, \cdots , A_N)\) と正整数 \(K\) が与えられます。1以上 \(K\) 以下の整数のうち、\(A\) の中に一度も現れないものの総和を求めよ。

解説

1以上 \(K\) 以下の総和から \(A\) から重複を除いた数を引く。

解説

1以上 \(K\) 以下の総和から \(A\) から重複を除いた数を引いたものが答えです。

解答

# 入力
N, K = map(int, input().split())
A = list(map(int, input().split()))

# A から重複を除いた集合 S
S = set(A)

# 1 から K までの和
ans = K*(K+1)//2

# 集合 S の各要素についてループを行う
for i in S:
    # もし要素 i が K 以下であれば、その値を引く
    if i <= K:
        ans -= i

# 出力
print(ans)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次