Pagini recente » Cod sursa (job #1588391) | Cod sursa (job #72513) | Cod sursa (job #2972276) | Cod sursa (job #1386357) | Cod sursa (job #38499)
Cod sursa(job #38499)
#include <stdio.h>
#define MAXN 63
#define INF (1e18+2)
#define swap(a,b) (a^=b, b^=a, a^=b)
typedef long long llong;
typedef long double real;
int N, C, B[MAXN], ind[MAXN], cnt[MAXN];
llong L, val[MAXN];
void solve(void)
{
int i, j, t, st, dr, m, r;
real p;
for(i = 1; i <= N; i++)
for(j = i+1; j <= N; j++)
if(val[i] < val[j])
swap(val[i], val[j]), swap(ind[i], ind[j]), swap(B[i], B[j]);
for(i = 1; i <= N; i++)
{
st = r = 0, dr = B[i];
while(st <= dr)
{
m = (st+dr) >> 1;
p = (real)m*val[i];
if(p > INF)
dr = m-1;
else
{
if( val[i]*m <= L )
r = m, st = m+1;
else
dr = m-1;
}
}
cnt[ind[i]] = r, L = L-val[i]*r;
}
}
void read_data(void)
{
int i, j, k;
llong t;
scanf("%d %d %lld\n", &N, &C, &L);
for(i = 1; i <= N; i++)
{
scanf("%d %d\n", &j, &B[i]), ind[i] = i;
for(t = 1, k = 1; k <= j; k++)
t = t*C;
val[i] = t;
}
}
void write_data(void)
{
int i, res = 0;
for(i = 1; i <= N; i++)
res += cnt[i];
printf("%d\n", res);
for(i = 1; i < N; i++)
printf("%d ", cnt[i]);
printf("%d\n", cnt[N]);
}
int main(void)
{
freopen("shop.in", "rt", stdin);
freopen("shop.out", "wt", stdout);
read_data();
solve();
write_data();
return 0;
}