Cod sursa(job #137588)

Utilizator raduzerRadu Zernoveanu raduzer Data 17 februarie 2008 12:45:53
Problema Heavy metal Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasele 5-8 Marime 1.11 kb
#include <stdio.h>
#include <stdlib.h>

int n,a[100000],b[100000],s,c[100000],d[100000],z;

void bubble()
{
	int i,z,sch;
	sch=1; 
	while (sch==1)
	{
		sch=0;
		for (i=1; i<n; ++i)
		{
			if (a[i]>a[i+1] || (a[i]==a[i+1] && b[i]<b[i+1]))
			{
				z=a[i];
				a[i]=a[i+1];
				a[i+1]=z;
				z=b[i];
				b[i]=b[i+1];
				b[i+1]=z;
				sch=1;
			}
		}
	}
}

int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

int main()
{
	freopen("heavymetal.in","r",stdin);
	freopen("heavymetal.out","w",stdout);
	scanf("%d",&n);
	int i,j;
	for (i=1; i<=n; ++i) scanf("%d%d",&a[i],&b[i]);
	bubble();
	for (i=1; i<=n; ++i)
	{
		if (i>1 && i<n && a[i]>=b[i-1] && b[i]<=a[i+1]) 
		{
			s+=(b[i]-a[i]);
			c[i]=1;
		}
		if (i==1 && b[i]<=b[i+1]) 
		{
			s+=(b[i]-a[i]);
			c[i]=1;
		}
		if (i==n && a[i]>=b[i-1]) 
		{
			s+=(b[i]-a[i]);
			c[i]=1;
		}
	}
	z=0;
	for (i=1; i<=n; ++i)
	{
		if (c[i]==0) 
		{
			++z;
			d[z]=b[i]-a[i];
		}
	}
	qsort (d,z+1,sizeof(int),compare);
	for (i=z; i>z/2; --i)
	{
		s+=d[i];
	}
	printf("%d\n",s);
	return 0;
}