Cod sursa(job #268064)

Utilizator DraStiKDragos Oprica DraStiK Data 28 februarie 2009 18:30:46
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <algorithm>
#define ll long long
#define DIM 35
using namespace std;
struct shop {int a,b,i,uz;} a[DIM];
int n,c,nrt;
ll l;
void read ()
{
    int i;
    scanf ("%d%d%lld",&n,&c,&l);
    for (i=1; i<=n; ++i)
    {
        scanf ("%d%d",&a[i].a,&a[i].b);
        a[i].i=i;
    }
}
int cmp1 (shop a,shop b)
{
    return a.a>b.a;
}
ll minim (ll a,ll b)
{
	if (a<b)
		return a;
	return b;
}
ll pow (int c,int p)
{
	int i;
	ll rez=1;
	for (i=1; i<=p; ++i)
		rez*=c;
	return rez;
}
void solve ()
{
	ll nr;
	int i;
	for (i=1; i<=n && l; ++i)
	{
		nr=pow (c,a[i].a);
		a[i].uz=minim (l/nr,a[i].b);
        nrt+=a[i].uz;
        l-=nr*a[i].uz;
    }    
}
int cmp2 (shop a,shop b)
{
    return a.i<b.i;
}
void print ()
{
    int i;
    printf ("%d\n",nrt);
    for (i=1; i<=n; ++i)
        printf ("%d ",a[i].uz);
}
int main ()
{
    freopen ("shop.in","r",stdin);
    freopen ("shop.out","w",stdout);    
    read ();
	sort (a+1,a+n+1,cmp1);
    solve ();
	sort (a+1,a+n+1,cmp2);
	print ();
    return 0;
}