Cod sursa(job #63606)

Utilizator Binary_FireFlorin Pg Binary_Fire Data 29 mai 2007 19:59:06
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#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;
}