• Codeforces Gym101234G Dreamoon and NightMarket(优先队列,子集和第k大)


    题意:

    求子集和第k大,n,k<=1e6

    思路:

    优先队列经典题目,注意优先队列是默认按从大到小排的

    代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<stack>
    #include<queue>
    #include<deque>
    #include<set>
    #include<vector>
    #include<map>
        
    #define fst first
    #define sc second
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    #define lson l,mid,root<<1
    #define rson mid+1,r,root<<1|1
    #define lc root<<1
    #define rc root<<1|1
    #define lowbit(x) ((x)&(-x)) 
    
    using namespace std;
    
    typedef double db;
    typedef long double ldb;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int,int> PI;
    typedef pair<ll,ll> PLL;
    
    
    const db eps = 1e-6;
    const int mod = 1e9+7;
    const int maxn = 4e5+100;
    const int maxm = 4e5+100;
    const int inf = 0x3f3f3f3f;
    const db pi = acos(-1.0);
    
    int n, k;
    ll a[maxn];
    priority_queue<pair<ll, int> ,vector<pair<ll,int>>, greater<pair<ll,int>> >q;
    
    //priority_queue<pair<ll,int>, vector<pair<ll,int> >, greater<pair<ll,int> > >q;
    int main(){
        scanf("%d %d", &n, &k);
        for(int i = 1; i <= n; i++){
            scanf("%lld", &a[i]);
        }
        sort(a+1,a+1+n);
        q.push({a[1],1});
        int cnt = 0;
        
        while(cnt < k){
            auto tmp = q.top();
            q.pop();
            ll ans = tmp.fst;
            int id = tmp.sc;
            if(id < n){
                q.push({ans+a[id+1],id+1});
                q.push({ans-a[id]+a[id+1], id+1});
            }
            cnt++;
            if(cnt == k){
                printf("%lld
    ", ans);
                break;
            }
        }
        return 0;
    }
  • 相关阅读:
    玩转动态编译
    [源码]RandomId 生成随机字符串
    玩转动态编译:四、封装
    玩转动态编译:三、提高性能,抛弃反射
    玩转动态编译:一、初识
    封装和内置函数property classmethod staticmethod
    面向对象--命名空间和组合
    初始面向对象
    模块之序列化模块和包
    模块 time模块 sys模块 os模块
  • 原文地址:https://www.cnblogs.com/wrjlinkkkkkk/p/10660258.html
Copyright © 2020-2023  润新知