Cod sursa(job #3282953)

Utilizator Carnu_EmilianCarnu Emilian Carnu_Emilian Data 7 martie 2025 17:31:50
Problema Shop Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fcin("shop.in");
ofstream fcout("shop.out");
typedef long long ll;

const int N = 1000;
int v[N], r[N];
struct elem
{
    ll a;
    int cnt, poz, r;
} a[N];
int n, c;
ll l;

bool comp1(elem a, elem b)
{
    return a.a < b.a;
}
bool comp2(elem a, elem b)
{
    return a.poz < b.poz;
}

ll mypow(int b, int e)
{
    ll rasp = 1;
    for (int i = 1; i <= e; i++)
        rasp *= b;
    return rasp;
}

int main()
{
    fcin >> n >> c >> l;
    for (int i = 1; i <= n; i++)
    {
        fcin >> a[i].a >> a[i].cnt;
        a[i].poz = i;
        a[i].a = mypow(c, a[i].a);
    }
    sort(a + 1, a + n + 1, comp1);
    ll sum = 0;
    for (int i = n; i >= 1; i--)
    {
        /// putem sa le luam pe toate?
        ll x;
        if (!__builtin_smulll_overflow(a[i].a, a[i].cnt, &x) && x <= l)
        {
            l -= x;
            a[i].r = a[i].cnt;
        }
        else /// nu putem sa le luam pe toate
        {
            x = l / a[i].a;
            a[i].r = x;
            l -= x * a[i].a;
        }
        sum += a[i].r;
    }
    sort(a + 1, a + n + 1, comp2);
    fcout << sum << '\n';
    for (int i = 1; i <= n; i++)
        fcout << a[i].r << ' ';
    return 0;
}