【AtCoder 緑色を目指して】ABC370【競技プログラミング】

技術ブログ 競技プログラミング

はじめに

こんにちは、駒嶺です。今回はAtCoder Beginner Contest 370の所感です。
今回もPythonで解いていきます。

A – Raise Both Hands

すぬけ君は手信号でたこ焼きを食べたいかどうかを高橋君に伝えてくれます。
左手のみ挙げている場合はたこ焼きを食べる。
右手のみ挙げている場合はたこ焼きを食べない。
両方の手が挙がっている場合または両方の手が挙がっていない場合は無効です。

L, R = map(int, input().split())

if L == 1 and R == 0:
    print("Yes")
elif L == 0 and R == 1:
    print("No")
else:
    print("Invalid")

問題文の通りに実装しました。

B – Binary Alchemy

元素の合成を行います。
最初元素1から始め、元素1,2,3,4,5を順に合成していきます。
2つの元素を合成したときに何の元素になるかのリストが与えられるので、最後に最終的に得られる元素を求めます。

解答

N = int(input())
A = [list(map(int, input().split())) for _ in range(N)]

num = 1
for i in range(1,N+1):
    if num >= i:
        num = A[num-1][i-1]
    else:
        num = A[i-1][num-1]

print(num)

問題文の通りにシミュレートしてます。

C – Word Ladder

文字列Sを文字列Tに置換します。
できるだけ文字列が辞書順で小さくなる順に1文字ずつ置換し、その過程を出力する必要があります。

解答

S = input()
T = input()

X = [S]
        
for i in range(len(T)):
    if X[-1][i] > T[i]:
        X.append(X[-1][:i] + T[i] + X[-1][i+1:])

for i in range(len(T) - 1, -1, -1):
    if X[-1][i] < T[i]:
        X.append(X[-1][:i] + T[i] + X[-1][i+1:])

X = X[1:]
print(len(X))
for x in X:
    print("".join(x))

文字列を左から見ていって、Sの文字よりTの文字の方が辞書順で大きい場合、置換します。
その後文字列を右から見ていって、Sの文字よりTの文字の方が辞書順で小さい場合、置換します。

コンテスト結果

D問題にも挑みましたが時間切れでコンテスト終了となりました。
今回はC問題までの3完でしたが早めに解けたのでパフォーマンスはそこそこでした。

おわりに

次回はABC371の記事を投稿します。
本ブログを通じて私と一緒に競技プログラミングの世界を楽しんでいただければ幸いです。
また、各種ご支援させていただきますので、お気軽に「お問い合わせフォーム」よりお問い合わせください。

関連記事