Cod sursa(job #439737)

Utilizator mihai.popescuPopescu Mihai mihai.popescu Data 11 aprilie 2010 18:51:37
Problema Gutui Scor 0
Compilator cpp Status done
Runda teme_upb Marime 1.43 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include <functional>
#include <cstdlib>

using namespace std;

class Gutuie{
	public:
		int greutate;
		int inaltime;

};

bool compare(const Gutuie& g1,const Gutuie& g2){
if(g1.inaltime != g2.inaltime)	
	return g1.inaltime < g2.inaltime;	
else
	return g1.greutate > g2.greutate;	
}

int main(){
	
ifstream fin("gutui.in");
 ofstream fout("gutui.out");		
	
 int n,h,u;
 
 fin>>n;
 fin>>h;
 fin>>u;	
	
 vector<Gutuie> v;
 vector<int> kg;
 vector<int> cos;
 
 int i;
 
 for(i = 0; i < n; i++){
	 Gutuie g;
	 fin>>g.inaltime;
	 fin>>g.greutate;
	 v.push_back(g); 
	} 	

 std::sort(v.begin(),v.end(),compare);
 
 for(i = 0; i < n;i++){
	 cout<<v[i].inaltime<<" ";
	} 
	cout<<endl;
 make_heap(kg.begin(),kg.end()); 
 int m;
 
 int hcur = v[0].inaltime;
 
 while(v.size() > 0)
 {
	m = 0;
	//cout<<"Intra";
	for(i = 0 ; i < v.size() ;i++)
	{//cout<<"ceva";
	    if(v[i].inaltime >= hcur  && v[i].inaltime < hcur + u){
			kg.push_back(v[i].greutate);
			push_heap(kg.begin(),kg.end());
			make_heap(kg.begin(),kg.end());
			m++;
			
		}		
		else
			break;
	}
	//cout<<m<<endl;	
	cos.push_back(kg[0]);
	cout<<"Aleg "<<kg[0]<<endl;
	pop_heap(kg.begin(),kg.end());
	cout<<kg.size();
	v.erase(v.begin(),v.begin()+m);
	
	hcur = hcur + u;
	for( i = n - m ; i < n ; i++)
	v[i].inaltime = v[i].inaltime + u ;	
}

int s = 0;

for( i = 0; i < cos.size() ; i++){
	s = s + cos[i];
}			
	cout<<s<<endl;
	
 }