AtCoder Beginner Contest 244 参加記録

更新

タグ:

AtCoder Beginner Contest 244に参加しました。

今回の結果はABCD4完でした。

レーティング変化は367→408!
やっと茶色に昇格できました!

ちなみになぜ参加前のレートが下がっているかというと、前日のARCをABCと間違えてRatedエントリーしてしまい、1問も解けずに終わったからです笑。

今回のコンテストですが、CD問題が結構簡単でした。そこを見過ごさずACできたことでレートを貰えたようです。

A - Last Letter

問題文の通りに書くだけです。

n = int(input())
s = input()

print(s[n-1])

B - Go Straight and Turn Right

高橋君の向いている方向を変数で保持しておきます(下記コードでは変数direction)。文字列Tをループで回して一文字ずつ取り出します。取り出した文字に応じて、向いている方向に1進むorその場で方向転換します。

n = int(input())
t = input()

x = 0
y = 0
direction = "e"
for i in range(n):
    if (t[i] == "S"):
        if (direction == "n"):
            y += 1
        elif(direction == "e"):
            x += 1
        elif(direction == "s"):
            y -= 1
        else:
            x -= 1
    else:
        if (direction == "n"):
            direction = "e"
        elif(direction == "e"):
            direction = "s"
        elif(direction == "s"):
            direction = "w"
        else:
            direction = "n"

print(x, y)

C - Yamanote Line Game

ジャッジプログラムと入出力を介して対話する形式の問題です。初めて見た形式の問題なので、ちょっと驚きました。過去にもこういう形式で出題があったのでしょうか。

具体的な数字を入れてみます。N=5のときを考えます。
N=5のとき、選択できる数字は1, 2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10, 11の11個です。
これらの数字をよく見ると、各数字は合計が12になるペアに分類できます(1と11、2と10、3と9…)。
6だけが例外です。この性質をうまく利用できそうです。
高橋君は青木君が宣言した数字のペアとなる数字を選択すれば、必ず条件を満たす数字を宣言できます。
問題はペアがない数字(N=5のときは6)ですが、これは高橋君の先行1ターン目で宣言してしまえば解決できます。

上記をまとめると以下のようになります。

  1. 2N+1を求める
  2. 宣言できる数字のうち、ペアを持たない数字を求める(N+1)
  3. 2の数字をprintする
  4. 青木君の入力(aoki_num)を受け取り、2N+1-aoki_numprintする
  5. 4をN回繰り返し、ゲーム終了
n = int(input())

total = 2*(n+1)
center_num = n+1

print(center_num)

for i in range(n):
    aoki_num = int(input())
    print(total - aoki_num)

exit(0)

D - Swap Hats

10^18は偶数です。つまり、偶数回の操作のあとS1, S2, S3とT1, T2, T3を一致させることができれば答えはYes、できなければNoとなります。これはS1, S2, S3とT1, T2, T3で、文字の位置が一致している数により判定できます。例えば、S1, S2, S3がR, G, B、T1, T2, T3がG, R, Bのとき、文字の位置が一致しているのはBの箇所だけです。

この場合、操作する回数が偶数回のときは何回操作してもS1, S2, S3とT1, T2, T3を一致させることはできません。このようにして、まず文字の位置が一致している数を求め、それに応じて場合分けすればYesかNoを判定できます。

si = [s for s in input().split()]
ti = [t for t in input().split()]

same_count = 0
for i in range(3):
    if si[i] == ti[i]:
        same_count += 1

if same_count == 3:
    print("Yes")
elif same_count == 1:
    print("No")
else:
    print("Yes")

E~Ex

略!

感想

簡単な問題だったとはいえ、しっかり4完できてよかったです。あとはもう少し速く解けるようになること、凡ミスして無駄なペナルティを喰わないようにすることが課題ですね。

亀並のスピードではありますが、やっと茶色に昇格できて嬉しいです。

次の目標は半年以内で緑に入ること!

引き続き楽しく取り組めていけたらいいかなと思います。