Cod sursa(job #436935)

Utilizator mihai.popescuPopescu Mihai mihai.popescu Data 9 aprilie 2010 01:26:00
Problema Gutui Scor 10
Compilator cpp Status done
Runda teme_upb Marime 2.9 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>

using namespace std;

class Gutuie{
	public:
		int greutate;
		int inaltime;
	
};

//int  compare(struct gutuie *, struct gutuie *);

//bool compare(struct gutuie *,struct gutuie *);

bool compare(const Gutuie& g1,const Gutuie& g2){
return g1.inaltime > g2.inaltime;	
}

int main(){
	
 ifstream fin("gutui.in");
 ofstream fout("gutui.out");		
	
 int n,h,u;
 
 fin>>n;
 fin>>h;
 fin>>u;
 
// cout<<"Numar: "<<n<<" Inaltime: "<<h<<" Inaltare: "<<u<<endl;
 vector<Gutuie> v;
 
 int i;
 for(i = 0; i < n; i++){
	 Gutuie g;
	 fin>>g.inaltime;
	 fin>>g.greutate;
	 v.push_back(g);
	} 
   	
   
 
 //vector<Gutuie>::iterator it;
 
 
 
 
 //Gutuie g1;
 //Gutuie g2;
 //Gutuie g3;
 
 //g1.greutate = 20;
 //g1.inaltime = 10;
 //g2.greutate = 40;
 //g2.inaltime = 40;
 //g3.greutate = 20;
 //g3.inaltime = 20;
 //v.push_back(g1);
 //v.push_back(g2);
 //v.push_back(g3);
 
 //cout<<v.
 //vector<Gutuie>::const_iterator citer = v.begin();
 //v.erase(v.begin(),v.begin()+1);
 std::sort(v.begin(),v.end(),compare);
// for(i = 0;i < v.size();i++){
	//cout<<"Inaltime: "<<v[i].inaltime<<" Greutate:"<<v[i].greutate<<endl; 
 //}	  
 /*vector<Gutuie> p;
 for(i = 0;i < v.size();i++){
		Gutuie ga;
		ga.inaltime = v[i].inaltime;
		ga.greutate = v[i].greutate;
		p.push_back(ga);
}	*/ 
 
 vector<Gutuie> g;
 for(i = 0;i < v.size();i++)
 {
	 if(v[i].inaltime == v[i+1].inaltime)
	 {
		 v[i+1].greutate = v[i+1].greutate + v[i].greutate;
		 //Gutuie gu;
		 //gu.inaltime = v[i+1].inaltime;
		 //gu.greutate = v[i+1].greutate;
		 //g.push_back(gu);
		}
		else{
		 Gutuie gu;
		 gu.inaltime = v[i].inaltime;
		 gu.greutate = v[i].greutate;
		 g.push_back(gu);
		}	
		
	}	 
	
	//cout<<endl<<g.size();
	//for(i = 0;i < g.size();i++){
	//cout<<"Inaltime: "<<g[i].inaltime<<" Greutate:"<<g[i].greutate<<endl; 
 //}	
 //cout<<endl<<v.size();
 /*for(vector<Gutuie>::const_iterator citer = v.begin();citer != v.end();++citer)
    cout<<" "<<(*citer).inaltime;*/
   //cout<<endl; 
 int suma = 0;
 //int nr;
 //cout << "vectorul contine:";
 //for(vector<Gutuie>::const_iterator citer = v.begin();citer != v.end();++citer)
   // cout<<" "<<(*citer).inaltime;
    //cout<<endl;
    //vector<Gutuie>::const_iterator citer = v.begin();
   while(g.size() > 0)
   {
	
	int count = 0;
	int iesi = 1;
	int s = 0;
	
	while(iesi == 1){
		if( (u > (h-g[count].inaltime)) && count < g.size() ){
					
				if(s < g[count].greutate)
					s = g[count].greutate;
				count++;
					//citer++;
		}	
		else
		 iesi = 0;
    }   
    if(count == 0)
		{
		s = g[count].greutate;
		count++;
		}
		
   //cout<<"Count este :"<<count<<endl;
   g.erase(g.begin(),g.begin()+count);
   //cout<<v.size();
   suma = suma +s;
   for(i = 0;i < g.size();i++)
       g[i].inaltime = g[i].inaltime + u;
   //citer = v.begin();
   
   }   
   //cout<<endl;
  //cout<<v[0].inaltime<<endl;  
  fout<<suma;
  fin.close();
  fout.close();
  return 0;
 	
	
}