Cod sursa(job #2684437)

Utilizator calinstefan025Avramoniu Calin calinstefan025 Data 13 decembrie 2020 18:29:43
Problema Energii Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream fin("energii.in");
ofstream fout("energii.out");

struct centrala {
	int produs;
	int cost;
};

void sortare_cresc_cost(int size, centrala generator[]) {
	for (int i = 1; i <= size; i++) {
		for (int j = i + 1; j <= size; j++) {
			if (generator[i].cost > generator[j].cost) {
				swap(generator[i].produs, generator[j].produs);
				swap(generator[i].cost, generator[j].cost);
			}
		}
	}	
}

centrala generator[1001];
int main()
{
	int nr_generatoare, energie_necesara;
	fin >> nr_generatoare;
	fin >> energie_necesara;
	int p, c , suma_energie = 0 , cost_minim = 0 , produs_maxim = 0 ;
	for (int i = 1; i <= nr_generatoare; i++) {
		fin >> p >> c;
		generator[i].produs = p;
		generator[i].cost = c;
		suma_energie = suma_energie + p;
	}
	if (suma_energie < energie_necesara) {
		fout << "-1";
	} else {
		sortare_cresc_cost(nr_generatoare, generator);
		int i = 1, j = i;
		produs_maxim = produs_maxim + generator[i].produs;
		cost_minim = cost_minim + generator[i].cost;
		//cout << cost_minim << "-A " << endl;
		if (produs_maxim == energie_necesara) {
			fout << generator[i].cost;
		}
		else {
			j++;
			while (j<=nr_generatoare) {
				produs_maxim = produs_maxim + generator[j].produs;
				cost_minim = cost_minim + generator[j].cost;
				//cout << cost_minim << "-A " << endl;
				if (produs_maxim >= energie_necesara) {
					while (produs_maxim >= energie_necesara) {
						
						produs_maxim = produs_maxim - generator[i].produs;
						cost_minim = cost_minim - generator[i].cost;
						i++;
						//cout << cost_minim << "-B " << endl;
					}
					cost_minim = cost_minim + generator[i-1].cost;
					fout << cost_minim;
					break;
				}
				else {
					j++;
				}
			}
		}
		
	}
	// secventa de cost minim

	return 0;
}