Pagini recente » Cod sursa (job #2110483) | Cod sursa (job #2202344) | Cod sursa (job #2146864) | Cod sursa (job #2348079) | Cod sursa (job #9612)
Cod sursa(job #9612)
#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;
}