Pagini recente » Cod sursa (job #2111527) | Cod sursa (job #825001) | Monitorul de evaluare | Cod sursa (job #2303482) | Cod sursa (job #63606)
Cod sursa(job #63606)
#include <stdio.h>
#include <cmath>
#define fin "shop.in"
#define fout "shop.out"
#define Nmax 31
struct inf { int pt,nr,poz; } v[Nmax];
int N,C,ret[Nmax],cnt;
long long S;
void swapf(int &a,int &b) { int aux; aux=a; a=b; b=aux; }
int main() {
int i,j,poz=0;
long long tmp;
inf aux;
freopen(fin,"r",stdin); freopen(fout,"w",stdout);
scanf("%d%d%lld",&N,&C,&S);
for (i=1;i<=N;++i) {
scanf("%d%d",&v[i].pt,&v[i].nr);
v[i].poz=i;
if ( v[i].pt == 0 )
poz=i;
}
for (i=1;i<=N;++i)
for (j=i;j>1 && v[j-1].pt<v[j].pt;--j) {
aux=v[j-1]; v[j-1]=v[j]; v[j]=aux;
}
if ( S % C != 0 ) {
ret[poz]=( S % C );
v[N].nr-= ( S%C );
S-=S%C;
cnt+=ret[poz];
}
for (i=1;i<=N && S;++i) {
if ( S - v[i].nr*pow(C,v[i].pt) > 0 ) {
ret[v[i].poz]+=v[i].nr;
S-=v[i].nr*(long long)pow(C,v[i].pt);
cnt+=v[i].nr;
}
else {
tmp=S/(long long)pow(C,v[i].pt);
ret[v[i].poz]+=tmp;
cnt+=tmp;
S= S - tmp*(long long)pow(C,v[i].pt);
}
}
printf("%d\n",cnt);
for (i=1;i<=N;++i)
printf("%d ",ret[i]);
return 0;
}