Cod sursa(job #1382643)

Utilizator DenisacheDenis Ehorovici Denisache Data 9 martie 2015 12:58:19
Problema Shop Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int N,C,a[35],b[35],ind[35],def,used[35];
long long L;
bool cmp(int i,int j)
{
    return a[i]<a[j];
}
long long pow(int C,int i)
{
    unsigned long long sol=1,a=C;
    while (i)
    {
        if (i&1) sol*=a;
        a*=a;
        i>>=1;
        if (sol>1e16)
        {
            sol/=C;
            break;
        }
    }
    return sol;
}
int getDef()
{
    int i;
    for (i=1;pow(C,i)<=L;i++);
    int def=i-1;
    return def;
}
int min(int x,long long y)
{
    if (x<y) return x;
    else return y;
}
int main()
{
    freopen("shop.in","r",stdin);
    freopen("shop.out","w",stdout);
    scanf("%d %d %lld",&N,&C,&L);
    for (int i=1;i<=N;i++) scanf("%d %d",&a[i],&b[i]),ind[i]=i;
    sort(ind+1,ind+N+1,cmp);
    long long cnt=0;
    for (int i=N;i>0;i--)
    {
        long long x=pow(C,a[ind[i]]);
        if (b[ind[i]]>0 && a[ind[i]]<getDef())
            used[ind[i]]=min(b[ind[i]],L/x),cnt+=used[ind[i]],L-=used[ind[i]]*x;
    }
    printf("%lld\n",cnt);
    for (int i=1;i<=N;i++) printf("%d ",used[i]);
    return 0;
}