zoukankan      html  css  js  c++  java
  • 【霍夫曼树】poj 1339 poker card game (数组排序+辅助队列的方法,预处理O(nlogn),构造霍夫曼树O(n))

    poj.org/problem?id=1339

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    
    using namespace std;
    int n;
    const int maxn=1e5+2;
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            priority_queue<int,vector<int>,greater<int> > pq;    
            scanf("%d",&n);
            int x;
            for(int i=0;i<n;i++){
                scanf("%d",&x);
                pq.push(x);
            }
            int ans=0;
            n--;
            while(n--){
                int x=pq.top();
                pq.pop();
                int y=pq.top();
                pq.pop();
                int z=x+y;
                pq.push(z);
                ans+=z;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }

     方法二

    数组排序+辅助队列(利用新加进来的内结点的单调性)

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<cmath>
    using namespace std;
    int n;
    const int maxn=1e5+2;
    int a[maxn];
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            scanf("%d",&n);
            for(int i=0;i<n;i++){
                scanf("%d",&a[i]);
            }
            sort(a,a+n);
            queue<int> Q;
            int ans=0;
            int l=0;
            int t=n-1;
            while(t--){
                int tmp=0;
                for(int i=0;i<2;i++){
                    if(!Q.empty()&&(l>=n||Q.front()<=a[l])){
                        tmp+=Q.front();
                        Q.pop();
                    }else{
                        tmp+=a[l];
                        l++;
                    }
                }    
                Q.push(tmp);
                ans+=tmp;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    inner join on, left join on, right join on讲解(转载)
    ref 与 out
    Shell基础01
    Python 基础01
    linux基础03
    Shell基础02
    linux基础02
    Linux基础01
    linux基础05
    linux基础04
  • 原文地址:https://www.cnblogs.com/itcsl/p/9181993.html
Copyright © 2011-2022 走看看