其实这个题完全不需要用手写堆,只需要一遍遍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. jmeter-逻辑控制器之 交替控制器(实现2个请求每次只执行其中一个)

    交替控制器: 案例:两个请求每次只能执行其中一个,可使用交替控制器. 1.线程组->添加->逻辑控制器->交替控制器 2.在控制下添加两个http请求.运行的时候第一次循环执行第一个 ...

  2. MQ 重复消费如何解决?

    1. 使用幂等操作 乐观锁:每个数据有一个版本号,和当前版本号相同的时候进行更新 去重表(缓存): 唯一性索引,如果已经存在值了就不行更新 2. 算法 两个链表是否相交? 3.redis  集合相交的 ...

  3. UVALive - 6442

    题目链接:https://vjudge.net/contest/241341#problem/I 题目大意:输入t,t组样例,输入n,m,有n个圆槽,m个硬币,接下来m行代表每个硬币所在的位子,要求你 ...

  4. Java文件与io——RandomAccessFile

    RandomAccessFile是IO包的类,从Object直接继承而来.只可以对文件进行操作,可以对文件进行读取和写入.RandomAccessFile有强大的文件读写功能,其内部是大型byte[] ...

  5. android 开发-数据存储之共享参数

    android提供5中数据存储方式 数据存储之共享参数 内部存储 扩展存储 数据库存储 网络存储  而共享存储提供一种可以让用户存储保存一些持久化键值对在文件中,以供其他应用对这些共享参数进行调用.共 ...

  6. DB2去重的几种方法

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 例如下表:table1 用户办理套餐的记 ...

  7. The program 'unzip' is currently not installed. You can install it by typing:

    linux解压遇到下面问题: The program 'unzip' is currently not installed. You can install it by typing: sudo ap ...

  8. 并发包阻塞队列之ArrayBlockingQueue

    并发包阻塞队列之ArrayBlockingQueue   jdk1.7.0_79  上一节中对并发包中的非阻塞队列ConcurrentLinkedQueue的入队.出队做了一个简要的分析,本文将对并发 ...

  9. Windows、Unix、Mac不同操作系统的换行问题-剖析回车符\r和换行符\n

    转载链接:http://blog.csdn.net/tskyfree/article/details/8121951 一.概念: 换行符‘\n’和回车符‘\r’ (1)换行符就是另起一行  --- ' ...

  10. java中的中文变量和方法

    在网上看到java居然支持中文变量名.方法.这里我只试了变量名和方法,类名这些没有试....真是给力 package com.gxf.fun; public class TestForChinese ...