Cod sursa(job #37777)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 25 martie 2007 12:31:04
Problema Shop Scor 100
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 0.93 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

int a[31],
    b[31],
    v[31];
long long p[34];

int i,n,c,o,x,q;
long long l,sum,t;
long long put(int x)
{
	int i;
	long long p=1;
	for (i=1; i<=x; ++i) p*=c;
	return p;
}

bool cmpf(const int x, const int y)
{
	return a[x]<a[y];
}

int main()
{
	freopen("shop.in","r",stdin);
	freopen("shop.out","w",stdout);
	scanf("%d %d %lld",&n,&c,&l);
	for (i=1; i<=n; ++i)
		scanf("%d %d",&a[i],&b[i]);
	for (i=1; i<=n; ++i) v[i]=i;
	sort(v+1,v+n+1,cmpf);
	i=1;
	p[1]=put(a[v[1]]);
	while (p[i]<=l && i<=n) 
	{
		++i;
		p[i]=put(a[v[i]]);
	}
	if (p[i]>l) --i;
	o=i;
	while (l>0)
	{
		x=b[v[i]];
		t=l/p[i];
		if (t>b[v[i]]) t=b[v[i]];
		l-=(long long)t*p[i];
		b[v[i]]-=t;
		b[v[i]]=x-b[v[i]];
		sum+=b[v[i]];
		--i;
		
	}
	printf("%lld\n",sum);
	q=i;
	for (i=1; i<=q; ++i) b[v[i]]=0;
	for (i=o+1; i<=n; ++i) b[v[i]]=0;
	for (i=1; i<n; ++i) printf("%d ",b[i]);
	printf("%d\n",b[n]);
	return 0;
}