讨论 / 为啥错了
吃狼的绵阳 2016-11-13 02:22:15
点我顶贴 收藏 删除
#include <iostream>

using namespace std;

int i,j,n,a[12000];

void input()

{

cin>>n;

for(i=0;i<n;i++)

cin>>a[i];

}

void dui()

{

for(i=n-1;i>=0;i--)

{

j=i;

while(j>=0)

{

if(a[j]<a[(j-1)/2])

{

swap(a[j],a[(j-1)/2]);

j=(j-1)/2;

}

else

break;

}

}

}

void insert(int x)

{

j=x;

while(j>=0)

{

if(a[j]<a[(j-1)/2])

{

swap(a[j],a[(j-1)/2]);

j=(j-1)/2;

}

else

break;

}

}

int getr()

{

int sum=0,k=0;

i=n-1;

while(i>=0)

{

cout<<endl;

swap(a[0],a[i]);

k++;

i--;

j=0;

while(j<=i)

{

if(2*j+1<=i-1)

{

if(a[2*j+1]<a[2*j+2])

{

if(a[j]<=a[2*j+1])

break;

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

j=2*j+1;

}

else

{

if(a[j]<=a[2*j+2])

break;

swap(a[2*j+2],a[j]);

j=2*j+2;

}

}

if(2*j+1<=i && 2*j+2>i)

{

if(a[j]<=a[2*j+1])

break;

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

j=2*j+1;

}

if(2*j+1>i)

break;

}

if(k%2==0)

{

sum+=a[i+1]+a[i+2];

a[i+1]+=a[i+2];

i++;

insert(i);

}

}

return sum;

}

int main()

{

input();

dui();

cout<<getr();

return 0;

}

查看更多回复
提交回复