其实这个题完全不需要用手写堆,只需要一遍遍sort就行了……

但是!

为了练习手写堆,还是用手写堆做了。

在做本题之前,如果你没有什么思路的话,建议先做Luogu的合并果子

好,假设你已经做过了合并果子了。那么正式开始本题:

相信许多人都已经知道了这道题就是合并果子,但是还不知道它是怎样转化成合并果子的,其实很简单:比如说9 7 6 5 3,有些同学可能会想:每次我砍最大的,然后剩下的不就少了。其实不然,因为不一定一次只能砍一个,可以砍两个或两个以上。不多说,我把上面例子的最优策略讲出来大概就知道了。step1:把9+7+6+5+3切成7+6和5+3+9两部分;step2:把7+6切成7和6;step3:把5+3+9切成5+3和9两部分:step4:把5+3切成5和3。这时我们再回过头来看,是不是就是合并果子的步骤?

AC代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
long long x,n,tot,dl[],sum;//小根堆
char c;
void delete_2(long long num)
{
if(((num<<)+)<=tot)
{
if(dl[num<<]<dl[(num<<)+])
{
if(dl[num]<dl[num<<])
return ;
else
{
swap(dl[num],dl[num<<]);
delete_2(num<<);
}
}
else
{
if(dl[num]<dl[(num<<)+])
return ;
else
{
swap(dl[num],dl[(num<<)+]);
delete_2((num<<)+);
}
}
}
else
{
if((num<<)<=tot)
{
if(dl[num]<dl[num<<])
return ;
else
{
swap(dl[num],dl[num<<]);
delete_2(num<<);
}
}
else
return ;
}
return ;
} void delete_1()//删除操作
{
dl[]=dl[tot--];
delete_2();
} void qcr(long long num) //名字随便取的
{
if(num==)
return ;
if(dl[num]<dl[num>>])
{
swap(dl[num],dl[num>>]);
num>>=;
qcr(num);
}
return ;
} void putin(long long x) //添加操作
{
dl[++tot]=x;
qcr(tot);
} void putout() //读取操作
{
printf("%d",dl[]);
return ;
} int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=n;i++)
{
cin>>x;
putin(x);
}
for(int i=;i<n;i++)
{
int q,p;
q=dl[];
delete_1();
p=dl[];
delete_1();
sum+=p+q;
putin(p+q);
}
cout<<sum;
return ;
}

Luogu [P1334] 瑞瑞的木板(手写堆)的更多相关文章

  1. 手写堆优化dijkstra

    \(dijkstra\) 算法的堆优化,时间复杂度为\(O(n+m)\log n\) 添加数组\(id[]\)记录某节点在堆中的位置,可以避免重复入堆从而减小常数 而这一方法需要依托手写堆 #incl ...

  2. spfa+剪枝 或者 dij+手写堆+剪枝 UOJ 111

    http://uoj.ac/problem/111 好像NOIP里面的题目...有好多都是...能通过xjbg剪枝来...AC题目的? 得好好学一下这些剪枝黑科技了... 思路:我觉得这位大佬说的很完 ...

  3. AC日记——手写堆ac合并果子(傻子)

    今天整理最近的考试题 发现一个东西叫做优先队列 priority_queue(说白了就是大根堆) 但是 我对堆的了解还是很少的 所以 我决定手写一个堆 于是我写了一个简单的堆 手写的堆说白了就是个二叉 ...

  4. hihoCoder 第136周 优化延迟(二分答案+手写堆)

    题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同 ...

  5. [转载] 管Q某犇借的手写堆

    跟gxy大神还有yzh大神学了学手写的堆,应该比stl的优先队列快很多. 其实就是维护了一个二叉堆,写进结构体里,就没啥了... 据说达哥去年NOIP靠这个暴力多骗了分 合并果子... templat ...

  6. BZOJ 1975 魔法猪学院(A*+手写堆)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1941  Solved: 595 [Submit][Sta ...

  7. 手写堆_C++

    一般主程序中拿堆顶元素 x=h[]; h[]=h[top--]; down(); 在堆尾加入元素 h[++top]=x; up(top); 上浮下沉操作 inline void up(int x) { ...

  8. 手写堆的dijkstra

    颓废.. #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...

  9. C++STL手写版

    手写STL,卡常专用. node为变量类型,可以自由定义,以下不再赘述. 1.stack(栈) 开一个数组,和一个top指针,压栈时++,弹栈时--即可. struct stack{ int tp;n ...

随机推荐

  1. CSS基本

    CSS选择器优先级:从高到低 无条件优先的属性只需要在属性后面使用!important,但是IE6不支持.解决办法,IE6是单个支持的. 例如: 在IE6中需要这样写 .className{color ...

  2. layui的tree和form并没有冲突!无限级tree下拉列表和select下拉列表同一页使用!

    在昨天写的随笔中: layui的tree和form同时引用出现冲突的粗略解决办法 https://www.cnblogs.com/xwma/p/10900975.html 提出有冲突,今天在开发中发现 ...

  3. jquery json实现省市级级联

    java后台程序: import java.util.HashMap;import java.util.List;import java.util.Map; import javax.servlet. ...

  4. POJ3696 The Luckiest Number 欧拉定理

    昨天终于把欧拉定理的证明看明白了...于是兴冲冲地写了2道题,发现自己啥都不会qwq 题意:给定一个正整数L<=2E+9,求至少多少个8连在一起组成正整数是L的倍数. 这很有意思么... 首先, ...

  5. 11 Lists

    1       Lists 1.1  定义并访问Lists List list = new List[].也可以使用泛型.访问list中的元素,可以使用list.get(i) or list[i]. ...

  6. Python2.7编程基础(博主推荐)

    不多说,直接上干货! 见 http://www.runoob.com/python/python-tutorial.html

  7. Sqoop概述

    sqoop Sqoop 是传统数据库与 Hadoop 之间数据同步的工具,它是 Hadoop 发展到一定程度的必然产物,它主要解决的是传统数据库和Hadoop之间数据的迁移问题.这节课我们将详细介绍 ...

  8. 《从0到1学习Flink》—— Data Sink 介绍

    前言 再上一篇文章中 <从0到1学习Flink>-- Data Source 介绍 讲解了 Flink Data Source ,那么这里就来讲讲 Flink Data Sink 吧. 首 ...

  9. elasticsearch报错:None of the configured nodes are available: []

    问题:在内网测试的时候可以正常访问,但是部署到外网上客户端连接elasticsearch报错:None of the configured nodes are available: [] 原因:默认情 ...

  10. 12.Visual Studio 2013中的默认快捷键

    这篇大致是IDE的使用技巧,常用的也就那么几个. 我自己用的最多的是注释.取消注释.格式调整.运行测试.开始调试.断开调试.重新开始调试.删除行ctrl+L.保存.全部保存.打开资源管理器.搜索等几个 ...