Pagini recente » Istoria paginii runda/simularecls10_10 | Cod sursa (job #1504279) | Profil NuSuntRoman | Cod sursa (job #2040481) | Cod sursa (job #1167918)
#include<fstream>
using namespace std;
long long n,c,l;
struct monezi{
int poz;
int a;
long long cant;
};
struct monezi b[40];
long long m[40];
ifstream in("shop.in");
ofstream out("shop.out");
void citire()
{
in>>n>>c>>l;
for(int i = 1 ; i <= n ; i++)
{
in>>b[i].a>>b[i].cant;
b[i].poz = i;
}
in.close();
}
void quicksort(int left , int right)
{
int i = left,j = right;
int pivot = b[(i+j)/2].a;
struct monezi aux;
while(i<=j)
{
while(b[i].a<pivot) i++;
while(b[j].a>pivot) j--;
if(i<=j)
{
aux = b[i];
b[i] = b[j];
b[j] = aux;
i++;
j--;
}
}
if(left < j) quicksort(left,j);
if(i < right) quicksort(i,right);
}
long long power(long long b,int e)
{
long long sol = 1;
if(e == 0) return 1;
while(e)
{
if(e%2){
sol*=b;
e--;
}
b=b*b;
if(e) e/=2;
}
return sol;
}
void solve()
{
quicksort(1,n);
long long sum = 0,i=n,s = l,a,sol=0;
while(sum < l){
a = power(c,b[i].a);
if(a == 0) a = 1;
if(s/a>b[i].cant){
m[b[i].poz] = b[i].cant;
sum+=a*b[i].cant;
s-=a*b[i].cant;
sol+=b[i].cant;
}
else {
m[b[i].poz] = s/a;
sum+=a*(s/a);
sol+=s/a;
s-=a*(s/a);
}
i--;
}
out<<sol<<"\n";
for(i = 1 ; i <=n ; i++)
out<<m[i]<<" ";
out.close();
}
int main()
{
citire();
solve();
return 0;
}