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;
	}
//	printf("sum is ok1\n");
}

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;
		//printf("%d %d\n",a[j],a[j+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;
		}
		//printf("i == %d count = %d\n",i,count);
	}
	//printf("sum is ok3\n");
	return t;
}
int main(void)
{
	int N,sum = 0,l,i = 0,count = 0,S = 0;
	int t1,t2,T;
	int len[20000];
	scanf("%d",&N);
	while(count < N)
	{
		scanf("%d",&l);
		Insert(len,l,count);
		count ++;
		sum += l;
	}
	count --;
//	for(i = 0;i <= count;i ++)
//			printf("len[%d] = %d ",i,len[i]);
//	printf("N = %d,count = %d\n",N,count);
//	for(i = 0;i <= count;i ++)
//		printf("%d ",len[i]);
//	printf("sum  = %d\n",sum);
	S += sum;
//	printf("S = %d\n",S);
	while(count > 1)
	{
		t1 = Deletemin(len,count);
		count --;
		t2 = Deletemin(len,count);
		count --;
	//	printf("%d %d\n",t1,t2);
		sum = t1+t2;
	//	printf("sum = %d\n",sum);
		count++;
		Insert(len,sum,count);
		S += sum;
		//printf("sum is ok2\n");
		//for(i = 0;i <= count;i ++)
		//	printf("len[%d] = %d ",i,len[i]);
	}
	printf("%d\n",S);

	return 0;
}

Double click to view unformatted code.


Back to problem 2886