Pagini recente » Cod sursa (job #2667784) | Cod sursa (job #263475) | Cod sursa (job #2368797) | Cod sursa (job #1599120) | Cod sursa (job #44488)
Cod sursa(job #44488)
#include <stdio.h>
#define NMAX 35
long long a[NMAX];
long long b[NMAX];
long long L, N, C;
long 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("%lld %lld\n", &a[i], &b[i]);
}
}
long long inline minim(long long a, long long b)
{
if(a < b)
return a;
return b;
}
long long power(long long n)
{
if(n == 1)
return C;
if(n == 0)
return 1;
long 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("%lld ", 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 = 0; j < N && 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;
}