View Code of Problem 2886

#include<stdio.h>
#include<stdlib.h>
void Insert(int *a,int len,int Count)
{
	int i,small,count;
	count = Count;
	a[count] = len;
	while(count != 0)
	{
		i = (count-1)/2;
		if(a[count] < a[i])
		{
			small = a[count];
			a[count] = a[i];
			a[i] = small;
			count = i;
		}
		else
			break;
	}
}

int Deletemin(int *a,int Count)
{
	int count = Count;
	int i = 0,bigger,j,k,t;
	t = a[0];
	a[0] = a[count --];
	while(i != count)
	{
		j = 2 * i + 1;
		if(j  < count)
		{
			if(a[i] < a[j]&&a[i]<a[j+1])
				i = count;
			else if(a[j + 1] <= a[j] && a[j+1] < a[i])
			{
				bigger = a[i];
				a[i] = a[j + 1];
				a[j + 1] = bigger;
				i = j + 1;
			}
			else if(a[j] < a[j+1]&&a[j] < a[i])
			{
				bigger = a[i];
				a[i] = a[j];
				a[j] = bigger;
				i = j;
			}
		}
		else if(j > count)
		{
			i = count;
		}
		else
		{
			if(a[i] > a[j])
			{
				bigger = a[i];
				a[i] = a[j];
				a[j] = bigger;
				i = j;
			}
			else
				i = count;
		}
	}
	return t;
}
int main(void)
{
	int N,l,i = 0,count = 0;
	long long S = 0,sum = 0;
	int len[20010];
	scanf("%d",&N);
	while(count < N)
	{
		scanf("%d",&l);
		Insert(len,l,count);
		count ++;
		S += l;
	}
	count --;
	while(count > 1)
	{
		sum = Deletemin(len,count);
		count --;
		sum += Deletemin(len,count);
		Insert(len,sum,count);
		S += sum;
	}
	printf("%lld\n",S);

	return 0;
}

Double click to view unformatted code.


Back to problem 2886