Cod sursa(job #199947)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 21 iulie 2008 14:10:11
Problema Shop Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#define IN "shop.in"
#define OUT "shop.out"
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define ll long long

int N,C;
int p[50],v[50];
int sol[50];
ll L;

void scan()
{
	int x,y;
	freopen(IN, "r",stdin);
	freopen(OUT, "w",stdout);
	scanf("%d%d%lld", &N,&C,&L);
	FOR(i,1,40)
		v[i] = -1;
	FOR(i,1,N)
		scanf("%d%d", &x,&y),
		v[x] = y,
		p[x] = i;
	sol[0] = N;	
}

inline ll pow(int x,int y)
{
	ll rez=1;
	for(;y>0;y/=2)  
    {  
		if( y%2 ) 
			rez *= (ll) x;  
		x *= (ll) x;  
    }  
    return rez;	
}

void solve()
{
	FOR(ii,1,33)
	{
		if(v[33-ii] == -1)
			continue;
		int i=33-ii;
		int j=v[i];
		FOR(jj,0,v[i])
			if((ll) (jj + 1) * pow(C,i) > L)
			{
				j = jj;
				break;
			}	
		sol[ p[i] ] = j;
		if(j)
			L -= (ll) j * pow(C,i);
		if(!L)
			break;
	}
	
	ll suma=0;
	
	FOR(i,1,N)
		suma += sol[i];
	printf("%lld\n",suma); 	
	FOR(i,1,N)
		printf("%d ", sol[i]);
}

int main()
{
	scan();
	solve();
	return 0;
}