Cod sursa(job #660175)

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


int main()
{
	ifstream f("f1.txt");
	ofstream g("f2.txt");
	
	struct bancnote
	{
		int tip;
		int cantitate;
	};
	
	int NumarBancnote = 0;
	int C = 0;
	int sumaNecesara = 0;
	f>>NumarBancnote>>C>>sumaNecesara;
	
	bancnote *bancnoteDisponibile = new bancnote[NumarBancnote]; 
	memset(bancnoteDisponibile, 0, NumarBancnote * sizeof(bancnote));
	int *bancnoteFolosite = new int[NumarBancnote];
	memset(bancnoteFolosite , 0 , sizeof(int));
	int *bancnoteDisponibile2 = new int[NumarBancnote];
	memset(bancnoteDisponibile2 , 0, sizeof(int));
	
	for (int i = 0; i  < NumarBancnote; ++i)
	{
		f>>bancnoteDisponibile[i].tip;
		bancnoteDisponibile[i].tip = C ^ bancnoteDisponibile[i].tip;
		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)
	{
		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 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;
}