Pagini recente » Cod sursa (job #2929726) | Cod sursa (job #766988) | Cod sursa (job #3159486) | Cod sursa (job #1837501) | Cod sursa (job #43521)
Cod sursa(job #43521)
#include <stdio.h>
#define in "shop.in"
#define out "shop.out"
#define dim 31
int A[dim], Nr[dim], sol[dim]; // C^A[i]
int N, C, q=0;
long long L, Val[dim];
bool sel[dim];
long long Putere(int,int);
void Qsort(int,int);
long long Minim( long long a, long long b)
{
if ( a < b ) return a;
return b;
}
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d%lld", &N, &C, &L);
for ( int i = 1; i <= N; i++ )
{
scanf("%d%d", &A[i], &Nr[i]);
Val[i] = Putere(C,A[i]);
}
int ok = 0;
int maxim = 0, poz;
long long total=0;
while ( ok == 0 )
{
maxim = -1;
for ( int i = 1; i <= N; i++ )
{
if ( maxim < A[i] && !sel[i] ) maxim = A[i], poz = i;
}
sel[poz] = 1;
long long t = L/Val[poz];
sol[poz] = Minim( t, Nr[poz] );
total += sol[poz];
L -= Val[poz]*sol[poz];
if ( L <= 0 ) ok = 1;
}
printf("%lld\n", total);
for ( int i = 1; i <= N; i++ )
printf("%d ", sol[i] );
}
void Qsort(int st, int dr)
{
int i = st-1;
int j = dr+1;
int pivot = A[st];
while ( i <= j )
{
do { i++; } while ( A[i] < pivot );
do { j--; } while ( A[j] > pivot );
if ( i <= j )
{
int aux = A[i];
A[i] = A[j];
A[j] = aux;
aux = Nr[i];
Nr[i] = aux;
Nr[j] = aux;
}
}
if ( st < j ) Qsort(st,j);
if ( i < dr ) Qsort(i,dr);
}
long long Putere(int p, int n)
{
q++;
if ( n == 1 ) return p;
else if ( n == 0 ) return 1;
else
{
if ( n % 2 == 0 )
{
long long t = Putere(p,n/2);
return t*t;
}
else
{
long long t = Putere(p,n/2);
return t*t*p;
}
}
}