Cod sursa(job #1811721)

Utilizator sergiunascaSergiu Nasca sergiunasca Data 21 noiembrie 2016 15:32:39
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
//
//  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(long long 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(long long i = 1; i <= a[1].putere; ++i)
    {
        x = x * c;
    }
    a[1].valoare = x;
    
    
    for(long long i = 2; i <= n; ++i)
    {
        for(long long j = a[i - 1].putere + 1; j <= a[i].putere; ++j)
        {
            x = x * c;
        }
        a[i].valoare = x;
    }
    
    x = 0;
    for(long long 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(long long i = 1; i <= n; ++i)
    {
        printf("%lld ", a[i].utilizat);
    }
    printf("\n");
    
    return 0;
}