Cod sursa(job #38055)

Utilizator c_iulyanCretu Iulian c_iulyan Data 25 martie 2007 14:34:13
Problema Shop Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream.h>
#include<string.h>
#include<math.h>
ifstream f("shop.in");
ofstream g("shop.out");
int n,c,vl;
long a[40],b[40],x[40],poz[40];
unsigned long w,suma;
char l[20];
void rd()
{f>>n>>c;
f.get();
f.get(l,20);
vl=strlen(l);
for(int j=0;j<vl;j++)
w=w*10+(l[j]-48);
for(int i=1;i<=n;i++)
{f>>a[i]>>b[i];
poz[i]=i;
}
}

void sch(long &a,long &b)
{long t=a; a=b; b=t;
}

void sort()
{long ul=n,n1;
do
{n1=ul-1;
ul=0;
for(long i=1;i<=n1;i++)
   if(a[i]<a[i+1])
      {sch(a[i],a[i+1]);
      sch(b[i],b[i+1]);
      sch(poz[i],poz[i+1]);
      ul=i;
      }
}while(ul>0);
}

void imp(char a[],long d)
{long r=0;
for(long i=0;i<vl;i++)
    {r=r*10+(a[i]-48);
    a[i]=r/d+48;
    r=r%d;
    }
}


int umple()
{long w1=w,r,p;
for(long i=1;i<=n;i++)
  {p=pow(c,a[i]);
  r=w1/p;
  if(r>b[i]) {x[poz[i]]=i; suma=suma+i;}
  else {x[poz[i]]=r; suma+=r;}
  w1=w1-p*x[poz[i]];
  }

if(w1==0) return 0;
return 1;
}



int main()
{rd();
sort();
if(umple()==0)
   {g<<suma<<"\n";
   int i=1;
   while(i<=n) {g<<x[i]<<" ";i++;}
}
return 0;
}