HHKBさん主催のABC235の参加記録です。
最近、灰diff埋めを開始しました。ABCの灰diffは比較的楽に解けるのですが、ARCやAGCの灰は一筋縄ではいかないですね。
灰diffを埋めたら茶diffを埋めていこうと思います。
この記事は、私がABC235のC問題までを自分が理解した内容で振り返る記事です。
レートは700台、使用言語はPython3です。
A – Rotate
標準入出力と文字/数値の取り扱いが出来るかが問われる問題。
変数 a, b, c をそれぞれ文字として受け取って、指定されたとおりに文字列として結合し、数値としてから足し算して出力すればOKですね。
# HHKB プログラミングコンテスト 2022(AtCoder Beginner Contest 235)
# A - Rotate
a, b, c = list(input())
abc = int("".join([a,b,c]))
bca = int("".join([b,c,a]))
cab = int("".join([c,a,b]))
print(abc +bca +cab)
B – Climbing Takahashi
条件分岐とfor文が使えますか。が問われる問題。
変数(now)に、現在地の高さを保持しておいて、各要素との比較で、今より真に大きい値であれば、変数の値を更新していく。更新できなところでfor文を抜ける。
とすればOKですね。
制約から、Hの各要素は1以上であることが保証されているため、初期状態の0としてスタートしていけばACします。
# HHKB プログラミングコンテスト 2022(AtCoder Beginner Contest 235)
# B - Climbing Takahashi
N = int(input())
H = list(map(int, input().split()))
now = 0
for h in H:
if now < h:
now = h
else:
break
print(now)
C – The Kth Time Query
dict()
が使えますか。また、しっかりと条件判定ができますか。が問われる問題。
クエリが来るたびに配列を確認していたら処理時間が実行時間の制限に間に合わない系ですね。
C問題ではおなじみのやつです。
Aの中身を前処理して、クエリが来るたびに、前処理した結果を返せばOKです。
今回は、Aの各要素の数でひとまとまりにしたいな。ということを考えました。
少し考えたら、dict で持てばよいことに気づきましたが、今度は、dict の value で迷います。
dict の value を簡単なデータ構造( int や str など)ではなく、list でも持てることを思い出し、実装していきます。
入出力例1で、クエリで処理する際に、xの値の中でk番目にあるもの。のk番目が存在しない場合もあることに気づけました。
Aに1は3個しかないのに、1の中で4番目にあるのはAの中の何番目ですか。というようなクエリも来ることがあることに気づけたので一回目でAC出来ました。
この入力例がなかったら、デバッグにものすごく時間がかかったものと思われます。
# HHKB プログラミングコンテスト 2022(AtCoder Beginner Contest 235)
# C - The Kth Time Query
N, Q = map(int, input().split())
A = list(map(int, input().split()))
dic = dict()
for i in range (N):
a = A[i] # 頻繁に使うため、aという変数で保持する。
if a in dic:
dic[a].append(i+1) # 1-indexにする。
else:
dic[a] = [] # keyを追加、value はリストとして保持する。
dic[a].append(i+1) # 1-indexにする。
# print(dic) # dictの中身を確認。提出時にはコメントアウトする。
for i in range (Q):
x, k = map(int,input().split())
if x in dic:
if len(dic[x]) >= k: # 入出力例1が優しいため気づいた。
print(dic[x][k-1]) # 0-indexで保持しているため、k-1
else:
print(-1)
else:
print(-1)
コメント