Pagini recente » Cod sursa (job #2379469) | Cod sursa (job #877026) | Cod sursa (job #2262375) | Cod sursa (job #278357) | Cod sursa (job #2170934)
#include <bits/stdc++.h>
using namespace std;
ifstream f("shop.in");
ofstream g("shop.out");
unsigned long long L;
int n,c,monezif,mu[32];
struct moneda{int a,poz; long long valoare;}monezi[100000001]; //tinem minte valoarea, numarul aparitiilor si pozitia fiecarei monede
int cmp(moneda a, moneda b) //criteriul de sortare
{
return (a.valoare>b.valoare);
}
int cmp1(long long a, long long b)
{
return(a>b);
}
int main()
{
int i,val,m;
f>>n>>c>>L;
long long v[60]={0};
v[1]=1;
//construim vectorul valoare
i=2;
while(c*v[i-1]<L)
{
v[i]=c*v[i-1]; i++;
}
m=i;
if(v[m]==0)m--;
//citire
for(i=1;i<=n;i++)
{
f>>val>>monezi[i].a;
monezi[i].poz=i;
monezi[i].valoare=v[val+1];
}
sort(monezi+1,monezi+n+1,cmp);
for(i=1;i<=n && L>0;i++)
{
long long valoare=monezi[i].valoare;
long long cat=L/valoare;
long long amin=min(cat,1LL*monezi[i].a);
if(amin>0)
{
monezif+=amin;
mu[monezi[i].poz]=amin;
L=L-amin*valoare;
}
}
g<<monezif<<'\n';
for(i=1;i<=n;i++)
g<<mu[i]<<' ';
f.close();
g.close();
return 0;
}