Cod sursa(job #809486)

Utilizator VincentVegaVincent Vega VincentVega Data 8 noiembrie 2012 16:28:33
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

long long N, C, L, nr = 1, ap[35], sol[35];
pair<long long, long long> A[35], B[35];

long long power(long long A, long long B) // A^B
{	
	long long ret = 1;
	for (int i = 1; i <= B; ++i)
	{
		ret = ret * A;
	}

	return ret;
}

int main()
{	
	ifstream fin("shop.in");
	ofstream fout("shop.out");

	fin >> N >> C >> L;
	
	// C^A[i]  ai de B[i] ori
	
	for (int i = 1; i <= N; ++i)
	{
		fin >> A[i].first >> A[i].second;
		B[i] = A[i];
	}
	
	long long sm = 0;
	for (int i = 1; i <= N; ++i)
	{
		long long mx = -1, poz;
		for (int j = 1; j <= N; ++j)
		{
			if (mx < A[j].first && !ap[j])
			{
				mx = A[j].first;
				poz = j;
			}
		}
		
		//cout << mx << ' ' << poz << '\n';

		ap[poz] = 1;
		
		long long nr = power(C, A[poz].first);
		//cout << nr << "     " << A[poz].second << '\n';	
		long long cat = L / nr;
		
		//cout << "C si nr: " << C << ' ' << nr << "   " << cat << '\n';
		//cout << L << '\n';
		if (cat > A[poz].second)
		{
			cat = A[poz].second;
		}
		
		L = L - nr * cat;
		sm += cat;
		sol[poz] = cat;
	}
	
	fout << sm << '\n';
	for (int i = 1; i <= N; ++i)
	{
		fout << sol[i] << ' ';
	}

	fout.close();
	return 0;
}