其实这个题完全不需要用手写堆,只需要一遍遍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. 软件包管理(rpm&yum)

    一.rpm包管理器 rpm是一个功能强大的包管理工具,可用于构建,安装,查询,验证,更新和卸载软件包. 用法: rpm [OPTION...] 配置文件: /var/lib/rpm/ 已安装rpm包的 ...

  2. es6的箭头函数转换为普通函数,以及将await/async函数转为普通函数

    箭头函数转为普通函数: 1. 安装babel-preset-es2015  npm install babel-preset-es2015 --save-dev 2.在.babelrc文件夹中:  & ...

  3. [USACO08JAN]跑步Running dp

    题目描述 The cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ...

  4. 高并发web系统优化总结

    1.背景 因为业务需要,搭建了一个系统,系统主要由两部分组成,web页面和数据库. mysql大概2万条数据,其中有一个字段是click_num点击次数,php页面会取点击次数最小的一条记录去进行操作 ...

  5. 练习十六:Python日期格式应用(datetime)

    练习:关于python日期格式应用练习.用python方法如何输出指定格式形式的日期 这里用到datetime模块,datetime模块重新封装了time模块,提供了更多接口,提供的类包括:date, ...

  6. python3+Appium自动化07-滑动操作以及滑动方法封装

    滑动解析 滑动主要分为:水平滑动.垂直滑动.任意方向滑动 滑动轨迹 在Appium中模拟用户滑动操作需要使用swipe方法,该方法定义如下: def swipe(self, start_x, star ...

  7. TypeScript 装饰器

    装饰器(Decorators)可用来装饰类,属性,及方法,甚至是函数的参数,以改变和控制这些对象的表现,获得一些功能. 装饰器以 @expression 形式呈现在被装饰对象的前面或者上方,其中 ex ...

  8. (win10 64位)未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    在64位的系统上,默认不支持Microsoft.Jet.OLEDB.4.0的驱动程序,系统默认会提示未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”的错误.(网上看到的,先这么认 ...

  9. HTML <pre> 标签

    需求 错落有致的规则说明 ps.我真的是一个后端开发... pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体.

  10. 网页mp3不能获取,报404问题解决

    js有些时候有些报错就是很莫名其妙 一 代码没错,js,html一点红都没有 然后上正式的时候,mp3不能播放音乐,报404 二 出这个错误,我第一反应是正式的配置有问题,毕竟开发测试都可以是不是? ...