Atcoder ABC297 E-G

Atcoder ABC297 E-G

E - Kth Takoyaki Set

链接:

E - Kth Takoyaki Set

简要题意:

问题陈述

\(N\) 种章鱼烧出售。一个 \(i\) -种的章鱼烧售价为 \(A_i\) 日元。

高桥总共至少会买一个章鱼烧。他可以购买多个同类章鱼烧。

求高桥可能支付的 \(K\) 个最低价格。在这里,如果有多套章鱼烧的价格相同,那么价格只计算一次。

思路:

  • 我们发现求topk问题,那么想到了二分或者说堆,我们发现二分不好求解
  • 想想小根堆,我们发现我们每次取出最小的数,然后暴力枚举数组,让数组与最小值相加,再丢入堆中,弹出k个即可,最后返回堆顶
  • 然后记得map去重

代码:

const int N = 200005;
int n,k;
int a[N];
void solve(){
    cin >> n >> k;
    priority_queue<int,vector<int>,greater<int>> q;
    set<int> se;
    q.push(0);
    for(int i = 1;i<=n;i++){
        cin >> a[i];
    }
    int id = 0;
    while(id < k){
        id++;
        int tp = q.top();q.pop();
        
        for(int j = 1;j<=n;j++) {
            if(se.count(tp+a[j])) continue;
            se.insert(tp+a[j]);
            q.push(tp+a[j]);
        }
    }
    cout << q.top();
}

F - Minimum Bounding Box 2

组合数学+容斥 待补

G - Constrained Nim 2

sg函数 待补

posted @ 2024-07-31 16:36  GsGXT  阅读(13)  评论(0编辑  收藏  举报