讨论 / 求各位大神路过帮忙看一下哪里错了 我用堆写的
tjb1998 2015-08-07 05:44:47
点我顶贴 收藏 删除
#include<iostream>

#include<algorithm>

using namespace std;

long long int ans=0;

int n;

int a[10010];

int f[10010];

int p;

void build()

{

p=n;

}

void out()

{

a[1]=a[p];

p--;

int q=1;

while(q*2<=p)

{

if(q*2+1<=p)

{

if(a[q*2+1]<a[q]&&a[q*2+1]<a[q*2])

{

swap(a[q*2+1],a[q]);

q=q*2+1;

}

else if(a[q*2]<a[q]&&a[q*2]<a[q*2+1])

{

swap(a[q*2],a[q]);

q*=2;

}

else

break;

}

else

{

if(a[q*2]<a[q])

{

swap(a[q*2],a[q]);

q*=2;

}

else

break;

}

}

}

void update()

{

int q=1;

while(q*2<=p)

{

if(q*2+1<=p)

{

if(a[q*2+1]<a[q]&&a[q*2+1]<a[q*2])

{

swap(a[q*2+1],a[q]);

q=q*2+1;

}

else if(a[q*2]<a[q]&&a[q*2]<a[q*2+1])

{

swap(a[q*2],a[q]);

q*=2;

}

else

break;

}

else

{

if(a[q*2]<a[q])

{

swap(a[q*2],a[q]);

q*=2;

}

else

break;

}

}

}

int main()

{

cin>>n;

for(int i=1;i<=n;i++)

cin>>a[i];

sort(a+1,a+n+1);

build();

for(int i=0;i<n-1;i++)

{

int t=a[1];

out();

a[1]+=t;

//cout<<a[1]<<endl;

ans+=a[1];

//cout<<ans<<endl;

update();

}

cout<<ans<<endl;

//system("pause");

return 0;

}

查看更多回复
提交回复