Pagini recente » Cod sursa (job #2670280) | Cod sursa (job #2397063) | Cod sursa (job #350483) | Cod sursa (job #3216053) | Cod sursa (job #1507133)
#include <fstream>
#include <vector>
#include <utility>
#include <algorithm>
#include <functional>
#include <array>
using namespace std;
constexpr int maxa = 32;
struct moneda{
int cate, ind;
long long marime;
moneda(const int c, const int i, const long long m):
cate(c), ind(i), marime(m){} };
bool operator>(const moneda a, const moneda b){
return a.marime > b.marime; };
int main(){
ifstream f("shop.in");
ofstream g("shop.out");
int n, c;
long long l;
f >> n >> c >> l;
array<long long, maxa+1> puterile_lui_c = {1};
for(int i = 1; i <= maxa; ++i){
puterile_lui_c[i] = puterile_lui_c[i-1] * c; }
vector<moneda> monezi;
for(int i = 0, a, b; i < n; ++i){
f >> a >> b;
monezi.emplace_back(b, i, puterile_lui_c[a]); }
sort(begin(monezi), end(monezi), greater<moneda>());
long long rez = 0;
vector<int> cate_de_fiecare(n, 0);
for(const auto m : monezi){
const int cate_luate = min(l/m.marime, (long long)m.cate);
cate_de_fiecare[m.ind] = cate_luate;
rez += cate_luate;
l -= m.marime * cate_luate; }
g << rez << '\n';
for(const auto x : cate_de_fiecare){
g << x << ' '; }
return 0; }