Cod sursa(job #40008)

Utilizator devilkindSavin Tiberiu devilkind Data 27 martie 2007 10:39:32
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 32

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

long long a[NMAX][2],i,j,k,n,L,nr[NMAX],p,ord[NMAX];
long long x,y,ok,t;

void citire()
{
fscanf(f,"%lld %lld %lld",&n,&k,&L);
t=1;
for (i=1;i<=n;i++)
    {
    fscanf(f,"%lld %lld",&x,&y);
    p=1;
    ok=1;
    for (j=1;j<=x;j++)    
        p*=k;
    a[i][0]=p;
    a[i][1]=y;
    } 
}

int cmp(const void *X, const void *Y)
{
if (a[ * (long long *) X ][0] > a[ * (long long *) Y ][0]) return 1;
return -1;
}

long long MINN(long long a, long long b)
{
if (a>b) return b;
return a;
}

void solve()
{
long long s;
for (i=1;i<=n;i++)
    ord[i]=i;
qsort(ord,n+1,sizeof(long long),cmp);
s=0;
for (i=n;i>=1&&L;i--)
    {nr[ord[i]]=MINN(L/a[ord[i]][0],a[ord[i]][1]);
    L=L-a[ord[i]][0]*nr[ord[i]];
    s+=nr[i];
    }
fprintf(g,"%lld\n",s);
for (i=1;i<=n;i++)
    fprintf(g,"%lld ",nr[i]);
}

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