Cod sursa(job #1208543)

Utilizator Kerriganamihut Kerrigan Data 16 iulie 2014 00:06:08
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
/******************************************************************************************
*           .--.																		  *
* ::\`--._,'.::.`._.--'/::			@author Ana M. Mihut	@course InfoArena Tryout	  *
* ::::. `  __::__ ' .:::::			@alias  LT-Kerrigan		@date   08.07.2014			  *
* ::::::-:.`'..`'.:-::::::			@link   http://infoarena.ro/problema/energii			  *
* ::::::::\ `--' /::::::::			@detail												  *
*																						  *
*******************************************************************************************/

#include <iostream>
#include <fstream>
#include <vector>
#include <stdio.h>
using namespace std;

unsigned int G;
unsigned int W;

bool PassPreliminaryTest(vector<float> energy, unsigned int W ){
	unsigned int sumTest = 0;
	for (int i = 0; i < energy.size(); i++){
		sumTest += energy[i];
		if (sumTest >= W)
			return true;
	}
	return false;
}

int main(){

	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);
	
	scanf("%d", &G);
	vector<float> Eg(G);
	vector<float> Cg(G);
	vector<unsigned int> weights(G);

	scanf("%d", &W);

	for (int i = 0; i < G; i++)
		scanf("%f %f", &Eg[i], &Cg[i]);

	if (!PassPreliminaryTest(Eg, W)) {
		printf("%d", -1);
		return 0;
	}

	int countE = 0;
	int minCost = 0;

	while (countE < W && Eg.size() > 0 && Cg.size() > 0){
		double maxWeight = 0;
		int storePos = 0;

		for (int i = 0; i < Eg.size(); i++){
			if (maxWeight == (Eg[i] / Cg[i])){
				if (Cg[i] <= Cg[i - 1]){
					maxWeight = (Eg[i] / Cg[i]);
					storePos = i;
				}
				else{
					maxWeight = Eg[i - 1] / Cg[i - 1];
					storePos = i - 1;
				}
			}
			else if (maxWeight < (Eg[i] / Cg[i])){
				maxWeight = (Eg[i] / Cg[i]);
				storePos = i;
			}
		}
		minCost += Cg[storePos];
		countE += Eg[storePos];
		Cg.erase(Cg.begin() + storePos);
		Eg.erase(Eg.begin() + storePos);
	}

	if (countE >= W)
	printf("%d", minCost);
	//else printf("%d", -1);
	return 0;
}