Pagini recente » Cod sursa (job #790179) | Cod sursa (job #2887355) | Cod sursa (job #2807914) | Cod sursa (job #847100) | Cod sursa (job #1382647)
#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*a>1e16) break;
}
return sol;
}
int getDef()
{
int i;
for (i=1;pow(C,i)<=L;i++);
int def=i;
return def;
}
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]]=b[ind[i]]<(L/x)?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;
}