Cod sursa(job #2497777)

Utilizator Alexandru_StoianStoian Sorin Alexandru Alexandru_Stoian Data 23 noiembrie 2019 11:06:30
Problema Shop Scor 90
Compilator cpp-64 Status done
Runda ad_hoc Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("shop.in");
ofstream g("shop.out");

int n,m,c,k,v[1001],p,aux[1001],ap[100];

long long l,val;

struct bani{
    int x,c,i;
}a[30];

bool cmp(bani a, bani b){
    return a.x>b.x;
}

bool cmp2(bani a, bani b){
    return a.i<b.i;
}

long long log_exp(int x, int n){
    if(n==0)return 1;
    if(x==0)return 0;
    long long p=x;
    long long sol=1;
    for(int i=0; (1<<i)<=n; ++i){
        if( ((1<<i) & n) > 0)
            sol=sol*p;
        p=p*p;
    }
    return sol;
}

int main(){
    f>>n>>c>>l;

    for(int i=1; i<=n; ++i){
        f>>a[i].x>>a[i].c;
        a[i].i=i;
        aux[i]=a[i].x;
    }

    sort(a+1, a+n+1, cmp);

    val=log_exp(c,a[1].x);

    int i=1;

    for(int i=1; i<=n && l>0; ++i){
        val=log_exp(c,a[i].x);
        p=l/val;
        if(p<a[i].c){
            l=l-p*val;
            a[i].c=p;
        }
        else l=l-a[i].c*val;
        k=k+a[i].c;
        ap[a[i].x]=min(p,a[i].c);
    }

    g<<k<<'\n';
    for(int i=1; i<=n; ++i){
        g<<ap[aux[i]]<<' ';
    }
    return 0;
}