Cod sursa(job #330298)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 9 iulie 2009 14:15:23
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

long long n,c,l,i,j,k,rez[40],nr;

struct nod
{ 
       long long a,b,fol,i;
}r[40];

long long p(long long x)
{ return x*x;
}

long long put(long long y)
{
    if(y==1) return c;
    else if(y%2) return p(put((y-1)/2))*c;
    else if(y%2==0) return p(put(y/2));
}    

bool comp(nod x,nod y)
{ 
     return x.a>y.a;
}

int main()
{ 
    freopen("shop.in","r",stdin);
    freopen("shop.out","w",stdout);
    
    scanf("%lld %lld %lld",&n,&c,&l);
    
    for(i=1;i<=n;i++) { 
                       scanf("%lld %lld",&r[i].a,&r[i].b);
                       if(r[i].a>0) r[i].a=put(r[i].a);
                       else r[i].a=1;
                       r[i].i=i;
                      }
    sort(r+1,r+n+1,comp);
    
   for(i=1;i<=n;i++) if(l) { k=l/r[i].a;
                               if(k<r[i].b) r[i].fol=k;
                               else r[i].fol=r[i].b;
                               l-=(r[i].a*r[i].fol);
                             }
                      
    for(i=1;i<=n;i++) { rez[r[i].i]=r[i].fol;
                        nr+=r[i].fol;
                      }
    printf("%lld\n",nr);
    for(i=1;i<=n;i++) printf("%lld ",rez[i]);
    printf("\n");
    
    fclose(stdin);
    fclose(stdout);
    return 0;
}