Cod sursa(job #9612)

Utilizator devilkindSavin Tiberiu devilkind Data 27 ianuarie 2007 16:24:54
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Unirea 2007, clasele 11-12 Marime 1.04 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 30000

FILE *f = fopen("abc.in","rt"), *g = fopen("abc.out","wt");

long int a[NMAX],b,c,i,j,k,s,s1,semn,n;



void citire()
{
fscanf(f,"%ld %ld %ld",&n,&b,&c);

for (i=1;i<=n;i++)
    {
    fscanf(f,"%ld",&a[i]);
    s+=a[i];
    }
}
    

int cmp(const void *x, const void *y)
{return a[ *(int *)x]- a[ *(int *)y];}

int cmp1(const void *x, const void *y)
{return a[ *(int *)y]- a[ *(int *)x];}



void solve()
{int ord[NMAX],v[NMAX];


s1=c-s;
if (s1<0) {s1=s1*-1;semn=-1;b=-1;}
    else semn=1;

for (i=0;i<=n;i++)
    ord[i]=i;


if (semn>0) qsort( ord,n+1,sizeof(int),cmp);
	else {qsort( ord,n+1,sizeof(int),cmp1);
	for (j=n;j>=0;j--)
		ord[j+1]=ord[j];
	}

k=0;

while (k<s1)
    {i=1;
    while (i<=n&&a[ord[i]]*semn<b&&k<s1)
        {a[ord[i]]+=1*semn;i++;k++;
        if (a[ord[i]]==b) b+=semn;
        }
    }

for (i=1;i<=n;i++)
    fprintf(g,"%ld ",a[i]);
}



int main()
{
citire();
solve();
fclose(f);
fclose(g);
return 0;
}