0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

競技プログラミングなんでもAdvent Calendar 2024

Day 17

ABC333Eを解いた【defaultdict】

Last updated at Posted at 2024-12-16

筆者はレート800前後の茶~緑コーダ

ABC333のE問題を解いていく

実装コード

後ろから探索して必要なポーションを数え、
対応するものがあれば拾い、
過剰なものは無視する。

所持する個数の最大値と拾ったかどうかの履歴をそれぞれ記憶しておく。

拾ったかどうかの履歴は別にリストでもいいけど反転させるのがなんか嫌だったのでqueueを使用してみた

必要な個数を管理するのにはdefaultdict君が便利

main.py
from collections import defaultdict,  deque
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)

d = defaultdict(lambda: 0)

def main():
    N = rI()
    events = [rLI() for _ in range(N)]
    
    action = deque()
    
    total = 0
    ans = 0
    
    for t,x in reversed(events):
        if t == 2:
            d[x] += 1
            total += 1
            ans = max(total,ans)
        else:
            if d[x] > 0:
                d[x] -= 1
                total -= 1
                action.appendleft(1)
            else:
                action.appendleft(0)
    if sum(d.values()) != 0:
        print(-1)
    else:
        print(ans)
        print(*action)
    
if __name__ == '__main__':
    main()

まとめ

問題が剣と魔法の冒険みたいな世界観で好き

後ろから解くという発想は手段の一つとして覚えておきたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?