Cod sursa(job #1507133)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 21 octombrie 2015 14:11:36
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <vector>
#include <utility>
#include <algorithm>
#include <functional>
#include <array>
using namespace std;

constexpr int maxa = 32;

struct moneda{
	int cate, ind;
	long long marime;
	moneda(const int c, const int i, const long long m):
		cate(c), ind(i), marime(m){} };

bool operator>(const moneda a, const moneda b){
	return a.marime > b.marime; };

int main(){
	ifstream f("shop.in");
	ofstream g("shop.out");
	int n, c;
	long long l;
	f >> n >> c >> l;
	array<long long, maxa+1> puterile_lui_c = {1};

	for(int i = 1; i <= maxa; ++i){
		puterile_lui_c[i] = puterile_lui_c[i-1] * c; }

	vector<moneda> monezi;
	for(int i = 0, a, b; i < n; ++i){
		f >> a >> b;
		monezi.emplace_back(b, i, puterile_lui_c[a]); }
	sort(begin(monezi), end(monezi), greater<moneda>());
	long long rez = 0;
	vector<int> cate_de_fiecare(n, 0);
	for(const auto m : monezi){
		const int cate_luate = min(l/m.marime, (long long)m.cate);
		cate_de_fiecare[m.ind] = cate_luate;
		rez += cate_luate;
		l -= m.marime * cate_luate; }
	g << rez << '\n';
	for(const auto x : cate_de_fiecare){
		g << x << ' '; }
	return 0; }