Pagini recente » Cod sursa (job #1410596) | Cod sursa (job #613832) | Cod sursa (job #1970182) | Cod sursa (job #355425) | Cod sursa (job #471003)
Cod sursa(job #471003)
#include <fstream>
#include <algorithm>
#include <functional>
#include <iterator>
#include <vector>
using namespace std;
ifstream fin("shop.in");
ofstream fout("shop.out");
inline long long dub(long long a)
{
return a * a;
}
inline long long power(int a, int b)
{
if (b == 0) return 1;
if (b == 1) return a;
if (b % 2 == 0) return dub(power(a, b / 2));
return a * dub(power(a, b / 2));
}
void Read();
void Solve();
void Write();
int n, c, a[33];
long long t, tot;
vector<pair<int, int> > v;
vector<pair<int, int> > sol;
int sols[33];
int main()
{
Read();
Solve();
Write();
}
void Read()
{
fin >> n >> c >> t;
v.resize(n);
for (int i = 0; i < n; ++i)
{
fin >> v[i].first >> v[i].second;
a[v[i].first] = i;
}
}
void Solve()
{
sort(v.begin(), v.end(), greater<pair<int, int> >());
for (vector<pair<int, int> >::iterator it = v.begin(); it != v.end(); ++it)
{
long long num = power(c, (*it).first);
long long times = min(int(t / num), (*it).second);
t -= times * num;
sol.push_back(make_pair((*it).first, times));
tot += times;
}
for (int i = 0; i < n; ++i)
sols[a[sol[i].first]] = sol[i].second;
}
void Write()
{
fout << tot << '\n';
copy(sols, sols + n, ostream_iterator<int>(fout, " "));
}