Cod sursa(job #660227)

Utilizator icb_mnStf Cic icb_mn Data 11 ianuarie 2012 22:15:37
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.34 kb
#include <iostream>
#include <fstream>
#include <string.h>
//#include <math.h>
//#include <conio.h>

using namespace std;
int main()
{
	ifstream f("shop.in");
	ofstream g("shop.out");
	
	struct bancnote
	{
		unsigned int tip;
		int cantitate;
	};
	
	int NumarBancnote = 0;
	int C = 0;
	long long sumaNecesara = 0;
	f>>NumarBancnote>>C>>sumaNecesara;
	
	bancnote /**/bancnoteDisponibile/* = new bancnote*/[31]; 
	memset(bancnoteDisponibile, 0, 31 * sizeof(bancnote));
	int /**/bancnoteFolosite /*= new int*/[31];
	memset(bancnoteFolosite , 0 , sizeof(int) * 31);
	int /**/bancnoteDisponibile2 /*= new int*/[31];
	memset(bancnoteDisponibile2 , 0, sizeof(int) * 31);
	
	for (int i = 0; i  < NumarBancnote; ++i)
	{
		int power = 0;
		f>>power;
		bancnoteDisponibile[i].tip =  1;
		for (int j = 0; j < power; ++j)
			bancnoteDisponibile[i].tip *= C;

		f>>bancnoteDisponibile[i].cantitate;
		bancnoteDisponibile2[i] = bancnoteDisponibile[i].tip;
	}
	
	for(int i = 0; i < NumarBancnote; ++i)
	{
		int aux = 0;
		for(int j = 0; j <= i; ++j)
		if(bancnoteDisponibile[j].tip < bancnoteDisponibile[i].tip)
		{
			aux = bancnoteDisponibile[i].tip;
			bancnoteDisponibile[i].tip = bancnoteDisponibile[j].tip;
			bancnoteDisponibile[j].tip = aux;
			
			aux = bancnoteDisponibile[i].cantitate;
			bancnoteDisponibile[i].cantitate = bancnoteDisponibile[j].cantitate;
			bancnoteDisponibile[j].cantitate = aux;
		}
	}
	 
	int i = 0;
	int bancnoteFolositeTotal = 0;
	while(sumaNecesara > 0)
	{
		long long bancnoteNecesare = sumaNecesara / bancnoteDisponibile[i].tip;
		if(bancnoteNecesare > bancnoteDisponibile[i].cantitate)
		{
			bancnoteFolosite[i] = bancnoteDisponibile[i].cantitate;
		}
		else
		{
			bancnoteFolosite[i] = bancnoteNecesare;
		}
		sumaNecesara -= bancnoteFolosite[i] * bancnoteDisponibile[i].tip;
	    
		bancnoteFolositeTotal += bancnoteFolosite[i];
		++i;
		if(i == NumarBancnote)
			break;
	}
	g<<bancnoteFolositeTotal<<endl;
	for(int i = 0; i < NumarBancnote; ++i)
	{
		for(int j = 0; j < NumarBancnote; ++j)
		{   if(bancnoteDisponibile2[i] == bancnoteDisponibile[j].tip)
			{   
				//if(bancnoteFolosite[j] != 0)
					g<<bancnoteFolosite[j]<<" ";
				break;
			}
		}
    }
	/*delete []bancnoteDisponibile2;
	delete []bancnoteDisponibile;
	delete []bancnoteFolosite;*/
	
	return 0;
}