ABC376振り返り


[前回の振り返り](https://qiita.com/comet725/items/cbb91782ab35ca261b0a)

今日はABC開催日だったので参加結果を振り返る


https://atcoder.jp/contests/abc376

今週はA,B,Cの3完(0ペナ)


# A

最初は飛ばして、
押した時刻からもらった時刻を引いて
それが基準値以上だったらもらえる
そしてもらった時刻を更新

## ソースコード

```python:main.py
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

def main():
    N, X = rLI()
    T = rLI()
    
    ans = 1
    D = T[0]
    for i,t in enumerate(T):
        if i == 0: continue
        df = t - D
        if df >= X:
            ans += 1
            D = t
        
    print(ans)
    
if __name__ == '__main__':
    main()

```

# B

ループとか座標系の苦手ジャンルのサラダすぎて
計算式がうまく建てられなかった。
特に開始と終わりを入れ替えるとかいう発想は自分には無かった

成約的に1手ずつ動かしてもよさそうだったので
安直に時計回りと反時計でどっちが動かせるかで実装
途中で反対の手にぶつかった場合はinfにして最小を取る

## ソースコード

```python:main.py
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

def main():
    N, Q = rLI()
    H ={"L":1,"R":2}
    oppsite = {"L":"R","R":"L"}
    ans = 0
    L = list(range(1,N+1))
    
    for _ in range(Q):
        q = rLS()
        p = q[0]
        t = int(q[1])
        o = oppsite[p]
        x = H[p]
        y = H[o]
        x0 = x1 = x
        # err(f"{p},t:{t},x:{x},y:{y},{ans}")
        if x == t:continue
        m0 = 0
        while x0 != t:
            x0 = (x0)%N+1
            m0 += 1
            # err(f"{p},t:{t},x:{x0},y:{y},{ans+m0}")
            if x0 == y:
                m0 = float("inf")
                break
        m1 = 0
        while x1 != t:
            x1 = x1-1 if x1 > 1 else N
            m1 +=1
            # err(f"{p},t:{t},x:{x1},y:{y},{ans+m1}")
            if x1 == y:
                m1 = float("inf")
                break
        # err(m0,m1)
        ans += min(m0,m1)
        H[p] = t
    print(ans)
    
if __name__ == '__main__':
    main()

```

# C

どちらも大きい順にソートして先頭から入れる
途中で入れられなかったらその大きさの箱を買う
そしてもう一回入れられなかったら失敗

ループ終了時、
最後が入らなかった場合と一番小さいので良い場合
があるので条件分岐しとく必要があるのは注意

## ソースコード

```python:main.py
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

def main():
    N = rI()
    A = list(reversed(sorted(rLI())))
    B = list(reversed(sorted(rLI())))
    err(A)
    err(B)
    ans = A[-1]
    is_over = False
    for i,a in enumerate(A):
        if i==N-1:
            break
        if a > (b:=B[i-is_over]):
            err(a,b)
            if is_over:
                print(-1)
                return
            is_over = True
            ans = a
    if is_over and A[-1] > B[-1]:
        ans = -1
    print(ans)
    
if __name__ == '__main__':
    main()

```

# D

グラフは苦手ジャンル…
GPTさんに泣きついたけどだめでした

# E

AではなくBの小さい順にソートしてしまっていた
C問題がソートして貪欲法チックに解けたけど
その流れをE問題に持ち込むのは良くなかったね

# F

苦労したB問題の高難易度とか何言っているんですか

# G

木というワードが見えた時点でそっ閉じ

# まとめ

Bが苦手ジャンル過ぎて大幅タイムロスしたので
Cを先に解けばよかったかもしれない
あとEが若干惜しかった