POJ3253

    这完全是一道记录我成长的题目。

    开始的开始看到这道题目,貌似是watercube的第一场比赛。貌似是第一次网络赛。那时候是盐在想这道题目。YY了各种方法没有能过sample。后来叶神告诉我那是什么哈夫曼树。但还是没有去写,那时根本不懂什么是哈夫曼树。

    后来经过了一个暑假我想我还是成长了很多,想到暑假前,那真的是一无所知,更不要说打校赛的时候了。当然现在也是大部分得不知道。只是偶然听说,但是我想我会在这后来的一年将它们on the way。

    暑假弱小的The 25th hour开始刷论坛上的题目。刚看到它的时候我小激动下,似曾相识燕归来。当兴冲冲的敲了代码后TLE了,好是失望。这是一道3个月前大家都很轻松的题目。后来看了题解,当时果断不会优先队列,于是只有模仿哈夫曼树的贪心的思想,弄两个数组搞。但是一直WA。今天又碰到了,于是用优先队列。开始WA原来数据是long long的。后来改了后就过了。只是觉得很不容易。这道题,陪我从第一次比赛到现在很是感动与慨叹,于是写篇题解寥表纪念。

    经过一个暑假,我想我已经看到了自己的未来,或者是拼搏的方向,无论结果如何,我想我都会试试的,毕竟我还是那个会被送墙角鲜花的老人所感动的孩子。

    上代码:

    #include<cstdio>
    #include<queue>
    using namespace std;
    priority_queue<long long,vector<long long>,greater<long long> > pq;
    main(){
        long long  n,a,b,ans=0,i;
        scanf("%lld",&n);
        for(i=0;i<=n-1;i++){
            scanf("%lld",&a);
            pq.push(a);
        }
        while(1){
            a=pq.top();
            pq.pop();
            if(pq.empty()){
                break;
            }
            b=pq.top();
            pq.pop();
            ans+=(a+b);
            if(pq.empty()){
                break;
            }
            pq.push(a+b);
        }
        printf("%lld\n",ans);
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值