Cod sursa(job #18115)
Utilizator | Sara Nicolae Bogdan sarabogdan | Data | 18 februarie 2007 09:35:43 |
---|---|---|---|
Problema | Ghiozdan | Scor | 0 |
Compilator | cpp | Status | done |
Runda | preONI 2007, Runda 2, Clasele 11-12 | Marime | 1.33 kb |
#include<stdio.h>
long n , G , S , i , j , k;
long a[100001];
long sir[100001];
void poz(long li,long ls , long&k, long a[100001])
{
int i = li, j=ls,c,i1=0,j1=-1,aux;
while(i<j)
{
if (a[i]>a[j])
{
a[j] = a[i];
a[i]=c;
c = i1;
i1 =-j1;
j1=-c;}
i=i+i1;
j=j+j1;
}
k = i;
}
void quick(long li,long ls)
{
if (li<ls)
{
poz(li,ls,k,a);
quick(li,k-1);
quick(k+1,ls);
}
}
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%ld%ld",&n,&G);
for (i = 1 ; i <=n ; i++)
scanf("%ld",&a[i]);
quick(1,n);
long nr = 0;
for (i = n ; i >= 1 ; i--)
{
if (S+a[i]<=G)
{
S+= a[i];
nr++;
sir[nr] = a[i];
}
}
printf("%ld %ld\n",S,nr);
for (i = nr ; i >= 1 ; i--)
printf("%ld\n",sir[i]);
return 0;
}