Pagini recente » Cod sursa (job #1616986) | Cod sursa (job #800900) | Cod sursa (job #612201) | Cod sursa (job #936505) | Cod sursa (job #22022)
Cod sursa(job #22022)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int a[1001],b[1001];
int n,i,j;
long s2,s,min,nr,aux,s3,ok,k,v;
int compare(const void *a,const void *b)
{
return *(int*)b-*(int*)a;
}
FILE *f,*g;
int main()
{
f=fopen("jocul.in","rt");
g=fopen("jocul.out","wt");
fscanf(f,"%d",&n);
s=0;
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&a[i]);
s+=a[i];
}
nr=(s+1)/2;
min=nr;
s2=0;
aux=s%2;
qsort(a+1,n,sizeof(int),compare);
k=1;
b[1]=0;
s2=0;
while (k>0)
{
v=0;
while (v==0&&b[k]<n)
{
s2-=a[b[k]];
b[k]++;
s2+=a[b[k]];
if (s2<=nr)
v=1;
}
if (!v)
{
k--;
s2-=a[b[k+1]];
}
else
if (nr-s2<min)
{
s3=s2;
min=nr-s2;
if (nr-s2==aux)
break;
else
if (b[k]<n)
{
k++;
b[k]=b[k-1];
s2+=a[b[k-1]];
// if (abs(nr-s2-a[b[k]])<min)
// {
// s3=s2+a[b[k]];
// min=abs(nr-s2-a[b[k]]);
// if (abs(nr-s2-a[b[k]])==aux)
// break;
// }
}
}
else
{
k++;
b[k]=b[k-1]+1;
}
}
if (s-s3>s3)
fprintf(g,"%ld %ld\n",s3,s-s3);
else
fprintf(g,"%ld %ld\n",s-s3,s3);
fclose(f);
fclose(g);
return 0;
}