茶色コーダーによるABC376振り返り

# はじめに
投稿遅れてすんません
点数見た時点で荒れると思っていたけどBの問題文がすごい複雑で結局C問題を先に解いてあとでBを解いた
Bの実装が結構重かった(茶色の感想)
初めて自分用ライブラリを導入してみたけど使い心地は良かった
今後も使おうと思う(今言わなくていい)
<details><summary>使っているライブラリ</summary>

```python
def pow(x: int, n: int, t: int = 1):
    if t == 1:
        ans = 1
        while n:
            if n % 2:
                ans = ans * x
            x = x * x
            n >>= 1
        return ans
    ans = 1
    while n:
        if n % 2:
            ans = (ans * x) % t
        x = (x * x) % t
        n >>= 1
    return ans


def is_prime(n: int) -> bool:
    if n == 1:
        return False

    i = 2
    s = n**0.5

    while i < s:
        if n % i == 0:
            return False

        i += 1

    return True


INF = 10**18
lowerlist = list("abcdefghijklmnopqrstuvwxyz")
upperlist = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")

```
</details>

それじゃ一問ずつ感想書きますか

# [A問題](https://atcoder.jp/contests/abc376/tasks/abc376_a)
まあ150点ってだけでいつものAと同じ感じだった
最後に押されたときの時間を変数においておいて
あとは問題文の通り実装した
Pythonでの[ACコード](https://atcoder.jp/contests/abc376/submissions/58933279)
```python
(
    N,
    C,
) = list(map(int, input().split()))
A = list(map(int, input().split()))
r = 1
t = A[0]

for i in A[1:]:
    if i - t >= C:
        r += 1
        t = i

print(r)
```

解説URL

https://atcoder.jp/contests/abc376/editorial/11190

# [B問題](https://atcoder.jp/contests/abc376/tasks/abc376_b)
最初にも話したように実装がきつかった
そして問題文をところどころ見落とし実装ミスした
制約をすごい見落としよくわからなくなりCへスキップCをACしてからBをACした

PythonでのACコード↓↓(ライブラリ抜粋)
[コード全文](https://atcoder.jp/contests/abc376/submissions/58970172)(2000byteもあります)
```python
N, Q = list(map(int, input().split()))
ans = 0
l = 1
r = 2

for _ in [0] * Q:
    H, T = input().split()
    T = int(T)

    if H == "L":
        tl = l
        c = 0
        mode = False
        while tl != T:
            if mode:
                tl -= 1
                c += 1
            else:
                if tl + 1 == r or (tl == N and r == 1):
                    c = 0
                    tl = l
                    mode = True
                else:
                    tl += 1
                    c += 1

            if c > 0:
                if mode:
                    if tl == 0:
                        tl = N
                else:
                    if tl == N + 1:
                        tl = 1

        l = T
        ans += c
    elif H == "R":

        tr = r
        c = 0
        mode = False
        while tr != T:
            if mode:
                tr -= 1
                c += 1
            else:
                if tr + 1 == l or (tr == N and l == 1):
                    c = 0
                    tr = r
                    mode = True
                else:
                    tr += 1
                    c += 1
            if c > 0:
                if mode:
                    if tr == 0:
                        tr = N
                else:
                    if tr == N + 1:
                        tr = 1

        r = T
        ans += c

print(ans)
```

解説URL

https://atcoder.jp/contests/abc376/editorial/11192

# [C問題](https://atcoder.jp/contests/abc376/tasks/abc376_c)
AとBどちらもソートして二分探索した
計算量は難解を極める
僕はどちらかというと**オブジェクト指向**、**関数型**も書けるが競プロ始めてから意識しないと**手続き型**になってしまい　**判定関数**も作っていないゴミコードですがよろしければ見てください

PythonによるACコード(ライブラリ抜粋)
[全文](https://atcoder.jp/contests/abc376/submissions/58957210)
```python
import bisect

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

r = 0

for i in range(N - 1):
    if A[i] <= B[i]:
        continue
    else:
        r += 1

if r >= 1:
    print(-1)
    exit()

ng, ok = (0, A[-1])

while ok - ng > 1:
    mid = (ng + ok) // 2
    TB = B.copy()
    bisect.insort(TB, mid)
    r = 0
    for a, b in zip(A, TB):
        if a <= b:
            continue
        else:
            r += 1
            break

    if r:
        ng = mid
    else:
        ok = mid

print(ng + 1)
```

解説URL

https://atcoder.jp/contests/abc376/editorial/11193

# [D問題](https://atcoder.jp/contests/abc376/tasks/abc376_d)
**閉路**なにそれ状態で結局ACできなかった
**BFS**の線までは言っていたがそれを1..Nすべて試す方法を思いついたが計算量が$O(N(N+M))$になってしまうため諦めた
最後までACできなかった

解説見たらBFSで頂点1に戻って来るだけで良かったらしい

解説URL

https://atcoder.jp/contests/abc376/editorial/11186

# 最後に
灰色に戻らなくてよかった
レートは30ぐらい上がりました