コンディション不調により後日バーチャル参加
A - Adjacent Product
リンク:A - Adjacent Product (atcoder.jp)
概要:配列に対して配列の各要素を出力してね
そのままを0~Nまで走査してを計算して配列を作成、最後にスペース区切りで出力します。
#ABC346 A - Adjacent Product
N = int(input())
A = list(map(int, input().split()))
B = [0] * (N-1)
for i in range(N-1):
B[i] = A[i] * A[i+1]
print(*B, sep = ' ')
提出リンク:提出 #51677468 - ユニークビジョンプログラミングコンテスト2024 春(AtCoder Beginner Contest 346)
B - Piano
概要:wbwbwwbwbwbwが無限に続く文字列に対して、wの数とbの数から作成可能な文字列がの部分文字列となりうるか判定してね。
題名の通りピアノの白鍵と黒鍵の並びですね。
1周期(ド~シ)に鍵盤が12個あるので、まずは1周期以下になるようとを引いていきます。
1周期以下に収めるとの範囲は0~5になるので、この範囲で部分文字列としてありえる組み合わせを全部(といっても最大6通り)書いてしまえばOKです。
例えば処理後ののときが0~3の範囲(b、wb、bw、wwb、wbw、bww、wwbw、wbww)であれば成立します。
以下のコードではで場合分けしていますが、上記のようにの数に着目すると考えやすいと思います。
#ABC346 B - Piano
W, B = map(int, input().split())
ans = 'No'
#問題の文字列が1周期以下になるよう調節
while W+B >= 12:
W -= 7
B -= 5
#考えられる組み合わせを全列挙して判定
if W - B == 0:
if B <= 5:
ans = 'Yes'
elif W - B == 1 or W - B == 2:
ans = 'Yes'
elif W - B == 3:
if B == 2 or B == 3:
ans = 'Yes'
elif W - B == -1:
if B == 1 or B == 2 or B == 3:
ans = 'Yes'
print(ans)
提出リンク:提出 #51678570 - ユニークビジョンプログラミングコンテスト2024 春(AtCoder Beginner Contest 346)
C - Σ
概要:以下で配列に含まれない数字だけを足し上げて出力してね
に含まれない、ということは以下の数字すべて足したものから[tex :A]に一度以上現れる数字の和を引けばいいと読み替えることができます。
以下の自然数の総和はで計算できます。
の重複を削除したのちにのものを足し上げて先の総和から引くことで答えとなります。
下記のコードではソートを入れていますが不要だと思います。
#ABC346 C - Σ
N, K = map(int, input().split())
A = list(map(int, input().split()))
#K以下の自然数の総和
tot = K*(K+1)//2
#setで重複削除
B = sorted(set(A))
s = 0
#Ai<=Kのみ足し上げる
for i in B:
if i <= K:
s += i
#総和から引き算して出力
ans = tot - s
print(ans)
提出リンク:提出 #51678770 - ユニークビジョンプログラミングコンテスト2024 春(AtCoder Beginner Contest 346)
結果
A~Cの3完51分程度で本番順位だと5,500位くらいでしょうか。
B問題で苦戦しました。
今回は本戦不参加なのでレート変動無しです。