Cod sursa(job #660061)

Utilizator icb_mnStf Cic icb_mn Data 11 ianuarie 2012 17:47:47
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <fstream>
//#include <math.h>
//#include <conio.h>


using namespace std;
int main()
{
	ifstream f("f1.txt");
	ofstream g("f2.txt");
	
	struct bancnote
	{
		int tip;
		int cantitate;
	};
	
	bancnote bancnoteDisponibile[1000] = {0};
	int bancnoteFolosite[100] = {0};
	int NumarBancnote = 0;
	int C = 0;
	int sumaNecesara = 0;
	f>>NumarBancnote>>C>>sumaNecesara;
	for (int i = 0; i  < NumarBancnote; ++i)
	{
		f>>bancnoteDisponibile[i].tip;
		bancnoteDisponibile[i].tip = C ^ bancnoteDisponibile[i].tip;
		f>>bancnoteDisponibile[i].cantitate;
	}
	
	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)
	{
		int 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;
	}
	g<<bancnoteFolositeTotal<<endl;
	for(int k = i - 1 ; k >= 0; --k )
		g<<bancnoteFolosite[k]<<" ";
	return 0;
}