ABC236参戦記

プログラミング

ABC236の参加記録です。

今回のコンテストは、開催の案内のメールが当日昼になっても来ていなくて、開催されるのかを心配していました。
現時点では、「直前のコンテストが終わってから送ろう」という運用ルールのようですね。
当日のお昼は、JOIGの開催していたようです。終了後、無事、案内メールも届きました。

本ブログ記事は、私がC問題までを振り返る記事です。使用言語はPython3です。レートは700台です。

A – chukodai

標準入出力と、データの型の特性、また、swapが出来るかを試される問題。

標準入力は、いろいろなパターンを覚えていくしかないと思います。
今回は、swapさせるために、list で受け取りました。

文字の位置の入れ替えは str だと不可能です。

この問題は、注意点が2点あり、

  • 配列の添え字は0-index なので、入力で与えられた数から 1 を引く。
  • swapする際に、入れ替える文字を一つずつ処理すると、入れ替える先の文字が同じになってしまう。

2番目の注意点に関しては、以下のいずれかで解決する必要がありますね。

  • 入れ替える文字を直接入れ替えるのではなくて、一度別の変数で保持した後に入れ替える。
  • 一度に入れ替える。

私は、コンテスト中は、一度に入れ替えています。
最後の出力は、str の join() を使用して文字を結合して出力しています。

# AtCoder Beginner Contest 236
# A - chukodai

S = list(input())
a, b = map(int,input().split())
a, b = a-1, b-1

S[a], S[b] = S[b], S[a]

print("".join(S))

一度、入れ替える文字をそれぞれ別の変数に保持した後に入れ替えたコードは次のようなものですね。

S = list(input())
a, b = map(int,input().split())
a, b = a-1, b-1

swapped_A = S[b]
swapped_B = S[a]
S[a] = swapped_A
S[b] = swapped_B

print("".join(S))

B – Who is missing?

繰り返し処理と条件分岐のコードが書けるかが問われる問題。

長さが(0を含めると、)N+1 の配列を用意して、与えられた数列から、出てきた数の index に1を加算していく。

用意した数列を、順にみていき、3になっていたら、その index を出力する。

問題の制約から、3になっている index は1つのため、特に注意する点はないと思います。
これが、数字が異なる複数枚のカードが抜かれていて、そのうちの最小の数字を出力する場合などの時には、プログラムの停止させる部分を書かないとWAになりますね。

# AtCoder Beginner Contest 236
# B - Who is missing?

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

ls = [0]*(N+1) # 1-index

for a in A:
    ls[a] += 1

for i in range(N+1):
    if ls[i] == 3:
        print(i)

C – Route Map

set が使えるかを問われる問題。

最近のC問題の中では、比較的優しめの問題に感じました。

急行列車が止まる駅の集合を持っておいて、各駅がその集合に含まれているかを判定していけばOKですね。

# AtCoder Beginner Contest 236
# C - Route Map

N, M = map(int,input().split())
S = list(map(str,input().split()))
T = set(map(str,input().split()))

for station in S:
    if station in T:
        print("Yes")
    else:
        print("No")

コメント

タイトルとURLをコピーしました