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?

ABC376Eを解いた【優先度付きキュー】

Last updated at Posted at 2024-10-21

筆者はレート700前後の茶色コーダ

ABC376当日にACできなかったE問題を解いていく

実装コード

A,B各要素をタプルにしておき、Aの昇順でソートする

このとき、Aの最大値は最低でもK番目以上が確定なので
そこから全探索すればいいようだ、

Bの総和の最小値は優先度付きキューで最大値を取りせるようにして現在のBと入れ替えればOK

main.py
import sys
import heapq
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)

class Maxheapq:
    def __init__(self):
        self.q = []
    def push(self, v):
        heapq.heappush(self.q, -v)
        return v
    def pop(self):
        return -heapq.heappop(self.q)
    def get(self):
        return self.q[0] * -1
    def values(self):
        for _q in self.q:
            yield -_q

def main():
    T = rI()
    
    for _ in range(T):
        N, K = rLI()
        A = rLI()
        B = rLI()
        L = []
        q = Maxheapq()
        for a,b in zip(A,B):
            L.append((a,b))
        L.sort()
        s = sum(b for _,b in L[:K-1] if q.push(b))
        ans = float('inf')
        # err(N,K,L)
        # err(s,L[:K-1])
        for i in range(K-1,N):
            a,b = L[i]
            # err(a,b,s+b,a*(s+b))
            # err(list(q.values()))
            ans = min(ans,a*(s+b))
            q.push(b)
            s += b
            s -= q.pop()
        print(ans)
        
if __name__ == '__main__':
    main()

まとめ

ABC376Eを解いた
Aの最大値はソート
Bの総和は優先度付きキューで管理して解いた

振り返りでも触れたが、
当日はAではなくBの昇順でソートしていた

最大値を確定させるという視点ではAのソートしたほうが確かに有効

そこから残りを全探索すればいいという発想と
総和の計算で優先度付きキューを使うという発想が難しかった

自分の地力だとE問題やはり一捻り二捻り考える必要があると改めて認識

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?