Pagini recente » Borderou de evaluare (job #3222063) | Monitorul de evaluare | Cod sursa (job #436935)
Cod sursa(job #436935)
#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;
}