Pagini recente » Cod sursa (job #2580068) | Cod sursa (job #1799369) | Rating Cosmin Bucur (coso2312) | Monitorul de evaluare | Cod sursa (job #1002766)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int n, C;
long long sum_answer, L;
inline long long pow(const int base, const int exp)
{
long long ret = 1LL;
int i;
for (i=1; i<=exp; ++i)
ret *= base;
return ret;
}
struct money
{
int amount, position;
long long value, answer;
};
money a[32];
inline void Read()
{
ifstream f ("shop.in");
f>>n>>C>>L;
int i, x, y;
for (i=1; i<=n; ++i)
{
f>>x>>y;
a[i].value = pow(C, x);
a[i].amount = y;
a[i].position = i;
}
f.close();
}
inline bool cmp_value (const money A, const money B)
{
return A.value > B.value;
}
inline bool cmp_position (const money A, const money B)
{
return A.position < B.position;
}
inline long long min(int x, long long y)
{
return x<y?x:y;
}
inline void Solve()
{
sort(a+1, a+n+1, cmp_value);
int i;
for (i=1; i<=n; ++i)
{
a[i].answer = min(a[i].amount, 1LL*L/a[i].value);
L -= 1LL*a[i].answer*a[i].value;
}
sort (a+1, a+n+1, cmp_position);
for (i=1; i<=n; ++i)
sum_answer += a[i].answer;
}
inline void Write()
{
ofstream g("shop.out");
g<<sum_answer<<"\n";
int i;
for (i=1; i<=n; ++i)
g<<a[i].answer<<" ";
g<<"\n";
g.close();
}
int main()
{
Read();
Solve();
Write();
return 0;
}