Pagini recente » Cod sursa (job #2637875) | Cod sursa (job #3134597) | Cod sursa (job #415662) | Cod sursa (job #636098) | Cod sursa (job #44481)
Cod sursa(job #44481)
#include <stdio.h>
#define NMAX 35
long a[NMAX];
long b[NMAX];
long long L, N, C;
long used[NMAX];
long long min;
void read()
{
int i;
scanf("%lld %lld %lld\n", &N, &C, &L);
for(i = 0; i < N; ++i)
{
scanf("%d %d\n", &a[i], &b[i]);
}
}
long long inline minim(long long a, long long b)
{
if(a < b)
return a;
return b;
}
long power(long n)
{
if(n == 1)
return C;
if(n == 0)
return 1;
long aux = power(n / 2);
if(n % 2)
return aux*aux*C;
return aux*aux;
}
void write()
{
int i;
printf("%lld\n", min);
for(i = 0; i < N; ++i)
{
printf("%ld ", used[i]);
}
printf("\n");
}
int hash[NMAX];
int main()
{
int i, j, nr, maxi, max;
long long pow;
freopen("shop.in", "r", stdin);
freopen("shop.out", "w", stdout);
read();
//qsort(0, n-1);
for(j = N-1; j > -1 && L; --j)
{
for(i = max = 0; i < N && L; ++i)
{
if(!hash[i] && b[i] && a[i] >= max && L >= power(a[i]))
{
max = a[i];
maxi = i;
}
}
i = maxi;
pow = power(a[i]);
nr = minim(L / pow, b[i]);
b[i] -= nr;
min += nr;
used[i] = nr;
hash[i] = 1;
L -= pow * nr;
}
write();
fclose(stdin);
fclose(stdout);
return 0;
}