Pagini recente » Cod sursa (job #1466832) | Cod sursa (job #2483717) | Cod sursa (job #1860417) | Cod sursa (job #2899605) | Cod sursa (job #1002765)
#include <iostream>
#include <fstream>
#include <algorithm>
#define lim 1000000
#define Next ++pos == lim?(f.read(buffer, lim), pos = 0):0
using namespace std;
int n, C;
int pos;
char buffer[lim];
long long sum_answer, L;
ifstream f ("shop.in");
inline void Read(int &x)
{
for (;buffer[pos] < '0' || buffer[pos] > '9'; Next);
for (x = 0; '0' <= buffer[pos] && buffer[pos] <= '9'; x = x*10 + buffer[pos] - '0', Next);
}
inline void Read(long long &x)
{
for (;buffer[pos] < '0' || buffer[pos] > '9'; Next);
for (x = 0; '0' <= buffer[pos] && buffer[pos] <= '9'; x = x*10 + buffer[pos] - '0', Next);
}
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()
{
Read(n), Read(C), Read(L);
int i, x, y;
for (i=1; i<=n; ++i)
{
Read(x), Read(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(const int x, const 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);
sum_answer += a[i].answer;
L -= 1LL*a[i].answer*a[i].value;
}
sort (a+1, a+n+1, cmp_position);
}
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;
}