Pagini recente » Cod sursa (job #188602) | Cod sursa (job #816324) | Cod sursa (job #185913) | Cod sursa (job #871112) | Cod sursa (job #248149)
Cod sursa(job #248149)
#include<cstdio>
#include<algorithm>
using namespace std;
#define NMAX 32
pair< long long, int > A[NMAX];
long long SOL[NMAX];
int I[NMAX];
inline bool cmp(const int a,const int b)
{
return A[a].first > A[b].first;
}
int main()
{
freopen("shop.in","r",stdin);
freopen("shop.out","w",stdout);
long long N,C,ANS=0;
long long L;
scanf("%lld%lld%lld\n",&N,&C,&L);
long long i,a1,a2;
for(i=1; i<=N; ++i)
{
scanf("%lld%lld\n",&a1,&a2);
if( a1<=30 )
A[i].first=1<<a1;
else
if( a1==31 )
A[i].first=2147483648;
//else
//if( a1==32 )
//A[i].first=4294967296;
A[i].second=a2;
I[i]=i;
//printf("%lld\n",A[i].first);
}
sort( I+1, I+1+N, cmp );
i=1;
long long MIN;
while( L && i<=N )
{
a1=I[i];
if( A[a1].first > L )
{ ++i; continue;}
a2=(L/A[a1].first);
MIN=a2<A[a1].second?a2:A[a1].second;
L-=MIN*A[a1].first;ANS+=MIN; SOL[ a1 ]+=MIN;
++i;
}
printf("%lld\n",ANS);
for(i=1; i<=N; ++i)
printf("%lld ",SOL[i]);
printf("\n");
return 0;
}