TonamiLog

ゆるキャン△とスノーボードとオタク

AGC034(2完)

ハロートナミです。
AGC034やりました

ネタバレがあります。

A

考え

問題の意味を理解するのに時間がかかった。
移動しなきゃいけない区間に'##'が存在する場合そもそも飛び越えられないので無理
D>Cである場合AとBは入れ替えが必要なので'...'が無いと無理

書いたソース
N, A, B, C, D = map(int, input().split())
S = input()
change = S[max(A,B)-2:min(C,D)+1]
S = S[min(A,B)-1:max(C,D)]

if S.count('##') > 0:
    print('No')
else:
    if change.count('...') > 0:
        print('Yes')
    elif C < D:
        print('Yes')
    else:
        print('No')

changeというのは「このエリアに...が無いと無理」という区間です。
競プロ中の変数名もうちょっと分かりやすさと短さを両立していきたい

B

これ本当に恥ずかしいので載せたくないけど自戒のために載せます

考え

ンン……?クレバーな方法が全然思いつかない
とりあえず置換すると何が起こるか考えてみる、手元のノートに何パターンか書く
あれこれたいしてパターン数無い?全パターンif文にすりゃ解けるんじゃないの?

書いたソース
s = input()

Amemo = 0
result = 0
A = False
B = False
C = False
for c in s:
    if c == 'A':
        if B:
            Amemo = 0
        A = True
        B = False
        C = False
        Amemo += 1
    elif c == 'B':
        if A or C:
            A = False
            B = True
            C = False
        else:
            Amemo = 0
            A = False
            B = False
            C = False
    elif c == 'C':
        if B:
            result += Amemo
            A = False
            B = False
            C = True
        else:
            Amemo = 0
            A = False
            B = False
            C = False
print(result)

Aがきたら何個連続したかを覚えます。
Bが来たら"直前がAだった", "直前にABCが完成した", "それ以外"で場合分けします。
Cが来たら"直前がABだったorABCB...だった", "それ以外"で場合分けします。
これやると答えが出るんですよ。本当です

会社の先輩にはブルートフォースだねって言われました。そうですね
考えてる途中でBCが移動していくように見えるな~とは思ってたのに解説の内容が思いつけなかったのひどいですね

C

考え

えーなんかlとuの2パターンだけ考えれば良いことは分かるが……破滅

書いたソース
# ない

DとEとF

考え

時間なし

結果

f:id:Thiroyuki:20190603003146p:plain

f:id:Thiroyuki:20190603003056p:plain
酷すぎて特にコメント無いんですけどAGCなのでレートは上がりましたみたいなね……
もうちょっとお勉強しようね。はい


おわり