ABC396振り返り


前回の振り返り

https://qiita.com/comet725/items/cadec396339a972c7239

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

https://atcoder.jp/contests/abc396

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


# A

同じ数が連続コンボしたのを数えて最大値取る。
3以上ならYes

## ソースコード

```python:main.py
from bisect import bisect_left, bisect_right, insort_left, insort_right
from collections import defaultdict, Counter, deque
from functools import reduce, lru_cache
from itertools import product, accumulate, groupby, combinations
import sys
import os
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())
IS_LOCAL = int(os.getenv("ATCODER", "0"))==0
err = (lambda *args, **kwargs: print(*args, **kwargs, file=sys.stderr)) if IS_LOCAL else (lambda *args, **kwargs: None)

def main():
    N = rI()
    A = rLI()
    combos = 1
    maxcmb = 0
    for i in range(1,N):
        if A[i]==A[i-1]:
            combos += 1
            maxcmb=max(maxcmb,combos)
        else:
            combos = 1
    print("Yes" if maxcmb >= 3 else "No")
    
if __name__ == '__main__':
    main()

```

# B

スタックの練習問題ですね。

## ソースコード

```python:main.py
from bisect import bisect_left, bisect_right, insort_left, insort_right
from collections import defaultdict, Counter, deque
from functools import reduce, lru_cache
from itertools import product, accumulate, groupby, combinations
import sys
import os
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())
IS_LOCAL = int(os.getenv("ATCODER", "0"))==0
err = (lambda *args, **kwargs: print(*args, **kwargs, file=sys.stderr)) if IS_LOCAL else (lambda *args, **kwargs: None)

def main():
    cards = [0]*100
    
    Q = rI()
    for _ in range(Q):
        q = rLI()
        if q[0] == 1:
            cards.append(q[1])
        else:
            print(cards.pop())
if __name__ == '__main__':
    main()

```

# C

最初にソートして価値を大きいものから取る

価値がプラスのボールは全取りしたいが、
白ボール取るには同じだけ黒ボール取る必要あるので。
白ボール取るために価値マイナスの黒ボール取る必要があるなら取る。

それ以外のときは取らない。

## ソースコード

```python:main.py
from bisect import bisect_left, bisect_right, insort_left, insort_right
from collections import defaultdict, Counter, deque
from functools import reduce, lru_cache
from itertools import product, accumulate, groupby, combinations
import sys
import os
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())
IS_LOCAL = int(os.getenv("ATCODER", "0"))==0
err = (lambda *args, **kwargs: print(*args, **kwargs, file=sys.stderr)) if IS_LOCAL else (lambda *args, **kwargs: None)


def main():
    N, M = rLI()
    B = rLI()
    W = rLI()
    B.sort(reverse=True)
    W.sort(reverse=True)
    # err(B)
    # err(W)
    bi = wi =0
    ans = 0
    while True:
        if bi == N: break
        elif wi < M and W[wi] >= 0 and B[bi] + W[wi] > 0:
            # err(B[bi] + W[wi], B[bi], W[wi])
            ans += B[bi] + W[wi]
            bi+=1
            wi+=1
        elif B[bi] > 0:
            # err(B[bi])
            ans += B[bi]
            bi+=1
        else:
            # err(B[bi])
            break
    print(ans)
if __name__ == '__main__':
    main()

```

# D

成約数的に全探索すればいいけどグラフだから投げた

# 感想

unratedとはいえ問題に向き合うモチベーションが低い状況です…