Cod sursa(job #330296)

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

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

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

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

int put( int 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("%d %d %d",&n,&c,&l);
    
    for(i=1;i<=n;i++) { 
                       scanf("%d %d",&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("%d\n",nr);
    for(i=1;i<=n;i++) printf("%d ",rez[i]);
    printf("\n");
    
    fclose(stdin);
    fclose(stdout);
    return 0;
}