Cod sursa(job #199982)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 21 iulie 2008 15:26:44
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#define ll long long
#define min(x,y) x<y ? x:y
int n,c,w[31],sol=0;
ll l;
struct ab{
	int n,f;
};
ab v[31];
ll pow(ll x, int y){
	if(y==0) return 1;
	if(y%2) return x*pow(x*x,y/2);
	else return pow(x*x,y/2);
}
void citeste(){
	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",&v[i].n,&v[i].f);
}
void solve(){
	int poz;
	ll x,y;
	while(l){
		poz=0;
		for(int i=1;i<=n;i++)
			if(v[poz].n<=v[i].n && v[i].f)
				poz=i;
		y=pow((ll)c,v[poz].n);x=min(l/y,v[poz].f);
		l-=x*y;
		sol+=x;
		w[poz]=x;
		v[poz].f=0;
	}
	printf("%d\n",sol);
	for(int i=1;i<=n;i++)
		printf("%d ",w[i]);
}
int main(){
	citeste();
	solve();
	return 0;
}