vijos1097 合并果子

  手写了一发二叉堆。

#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
inline int read(){
    char c; while(c=getchar(),!isdigit(c)); int x=c-‘0‘;
    while(c=getchar(),isdigit(c)) x=x*10+c-‘0‘; return x;
}
int cnt,h[10001];
void up(int x){
    if(x==0 || x==1) return;
    if(h[x]<h[x/2]) swap(h[x/2],h[x]),up(x/2);
}
void down(int x){
    if(x*2>cnt) return;
    int to=0;
    if(x*2<cnt && h[x*2+1]<h[x*2]) to=1;
    if(h[x]>h[x*2+to]) swap(h[x],h[x*2+to]),down(x*2+to);
}
void push(int x){
    h[++cnt]=x;
    up(cnt);
}
void pop(){
    h[1]=h[cnt--];
    down(1);
}
int top(){return h[1];}
int main(){
    int n=read(),tot=0;
    cnt=n;
    for(int i=1;i<=n;i+=1) h[i]=read();
    for(int i=n;i>=1;i-=1) down(i);
    for(int i=1;i<n;i+=1){
        int x=top(); pop();
        x+=top(); pop();
        tot+=x; push(x);
    }
    printf("%d",tot);
    return 0;
}
时间: 2024-10-10 05:30:08

vijos1097 合并果子的相关文章

AHOI1997彩旗飘飘 VIJOS1097合并果子(noip2007)

为了防止手感下滑,就把整理长乐集训题题解的脚步给放慢了... 前几天vj死了好久,就刷起了rqnoj...里面题目质量有的太烂了,而且第一页的题号还是不连续的!! 晚上vj修好后刷了一题,还有之前刷的ahoi的题也在这里说一下吧...也无聊刷了一些特别水的题目就懒得说了... AHOI彩旗飘飘 这是一题类似于排列组合的题目吧...递推状态 数组f[100][100][100][2];表示红旗数目,黄旗数目,颜色改变的次数,末尾的旗的颜色(0为黄,1为红) 之后就是如何写递推式了: for(int

洛谷P1090 合并果子

题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最

Laoj P1170 [noip2004]合并果子(STL解法)

试题描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆.每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所消耗体力之和.因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少

洛谷 1090合并果子

题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最

合并果子

1840: 合并果子 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果

1063 合并果子 2004年NOIP全国联赛普及组

题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序

[NOIP2004] 提高组 洛谷P1090 合并果子

题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最

合并果子(优先队列 +或者+哈夫曼)

合并果子 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 312  Solved: 113[Submit][Status][Web Board] Description 现在有n堆果子,第i堆有ai个果子.现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数.求合并所有果子的最小代价. Input 第一行包含一个整数T(T<=50),表示数据组数.每组数据第一行包含一个整数n(2<=n<=1000),表示果子的堆数.第二行包含n个正

【NOIP合并果子】uva 10954 add all【贪心】——yhx

Yup!! The problem name reects your task; just add a set of numbers. But you may feel yourselvescondescended, to write a C/C++ program just to add a set of numbers. Such a problem will simplyquestion your erudition. So, lets add some avor of ingenuity