Pagini recente » Cod sursa (job #1169353) | Cod sursa (job #1089559) | Cod sursa (job #2727406) | Cod sursa (job #1964827) | Cod sursa (job #1811718)
//
// main.cpp
// shop
//
// Created by Nasca Sergiu Alin on 21/11/2016.
// Copyright © 2016 Nasca Sergiu Alin. All rights reserved.
//
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
typedef struct
{
long long valoare;
long long putere;
long long nr_monezi;
long long indice;
long long utilizat;
}moneda;
bool CMP(moneda A, moneda B)
{
return A.putere < B.putere;
}
bool CMPIndice(moneda A, moneda B)
{
return A.indice < B.indice;
}
moneda a[40];
int main(int argc, const char * argv[])
{
freopen("shop.in", "r", stdin);
freopen("shop.out", "w", stdout);
long long n, c, l, x, nr;
scanf("%lld %lld %lld", &n, &c, &l);
for(int i = 1; i <= n; ++i)
{
scanf("%lld %lld", &x, &nr);
moneda m;
m.nr_monezi = nr;
m.putere = x;
m.indice = i;
a[i] = m;
}
sort(a + 1, a + n + 1, CMP);
x = 1;
for(int i = 1; i <= a[1].putere; ++i)
{
x = x * c;
}
a[1].valoare = x;
for(int i = 2; i <= n; ++i)
{
for(int j = a[i - 1].putere + 1; j <= a[i].putere; ++j)
{
x = x * c;
}
a[i].valoare = x;
}
x = 0;
for(int i = n; i >= 1; --i)
{
if((long long)l / a[i].valoare >= a[i].nr_monezi)
{
a[i].utilizat = a[i].nr_monezi;
x = x + a[i].utilizat;
l = l - a[i].valoare * a[i].utilizat;
}
else
{
a[i].utilizat = (long long)l / a[i].valoare;
x = x + a[i].utilizat;
l = l - a[i].valoare * a[i].utilizat;
}
}
sort(a + 1, a + n + 1, CMPIndice);
printf("%lld\n", x);
for(int i = 1; i <= n; ++i)
{
printf("%lld ", a[i].utilizat);
}
printf("\n");
return 0;
}