ユニークビジョンプログラミングコンテスト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)