Tenka1 Programmer Beginner Contest 2019感想戦

コンテストやったきりで復習しないマンなので,
blogに書くことによって強制的に復習するライフハック()を実践していく.
言い訳をする気はないけど(ちょっとある),
今回妙にメチャ回答の表示とか鯖側の処理が遅かった気がする.....

Tenka1 Programmer Beginner Contest 2019

atcoder.jp

A - On the Way

https://atcoder.jp/contests/tenka1-2019-beginner/tasks/tenka1_2019_a

解けた.

A, B, C = map(int, input().split())
if(A < C < B or A > C > B):
    print('Yes')
else:
    print('No')

正直言うと,Pythonらしい綺麗なコードですねぇ(ニヤニヤ)と思って解いてた
彼はこのとき,後の絶望を予測することは出来なかった.....

B - *e**** ********e* *e****e* ****e**

https://atcoder.jp/contests/tenka1-2019-beginner/tasks/tenka1_2019_b

解けた.

N = int(input())
S = list(input())
K = int(input())

for i in range(N):
    if(S[i] != S[K-1]):
        S[i] = '*'
print(''.join(S))

特に何にもない
リスト内包表記を使ってイキる気もなし

C - Stones

https://atcoder.jp/contests/tenka1-2019-beginner/tasks/tenka1_2019_c

解けなかった....
最後に提出した残骸

N = int(input())
S = list(input())

flag = False
count_w = 0
count_b = 0

count = 0
S_map = []
for i in S:
    if(i=="."):
        count += 1
        S_map.append(count)
    else:
        S_map.append(count)
ans = []
for i in range(N):
    if(i == 0 or S[i-1] == "." and S[i] == "#"):
        if(i != 0):
            left_white = S_map[i]
            left_black = i - left_white
        else:
            left_white = 0
            left_black = 0
        if(i != N-1):
            right_white = S_map[-1] - S_map[i]
            right_black = (N-i-1) - right_white
        else:
            right_white = 0
            right_black = 0
        ans.append(min(left_white+right_white, left_black+right_black, left_black+right_white))
print(min(ans))

一回目の提出で「まあ,今回結果見れるまで時間かかるし,どうせACだし確認しなくていいや」と思ってD問題に移行してしまったorz 途中やっぱ確認しとくかと思ってテストケースの下5つがWAになっているのを確認して,左側白で右側黒のパターンを間違えているのに気づいたのは良かった
そこで綺麗に書き直せば良かったのに,前のクソコードを引き継いで書いたせいで,バグ残りまくりで無事死亡
ちゃんと書き直したら通りました.....

import numpy as np

N = int(input())
S = list(input())

S_map = [1 if i=="." else 0 for i in S]
cumsum = np.array(S_map).cumsum()
cumsum = np.insert(cumsum, 0, 0)
ans = []

for i in range(N+1):
    if(i == 0 or i == N or S[i-1] != S[i]):
        if(i != 0):
            left_white = cumsum[i]
            left_black = i - left_white
        else:
            left_white = 0
            left_black = 0
        if(i != N):
            right_white = cumsum[-1] - cumsum[i]
            right_black = (N - i) - right_white
        else:
            right_white = 0
            right_black = 0
        ans.append(min(left_white+right_white, left_black+right_black, left_black+right_white))
print(min(ans))

D - Handstand

https://atcoder.jp/contests/tenka1-2019-beginner/tasks/tenka1_2019_d

解けなかった.....
なんにもわからん
解説読んだらDPで解けるらしい.... 誰かのコードを参考にしようと思ったけど,BeginnerでPython3使ってAC出してる人いないんだが Beginnerじゃないほうでも居なかったけど,PyPy3でAC出してる人はいた n_knuuさんコード
綺麗だ......

結果

result
result