Pagini recente » Cod sursa (job #2470820) | Cod sursa (job #56930) | Cod sursa (job #1920851) | Cod sursa (job #293861) | Cod sursa (job #516726)
Cod sursa(job #516726)
# include <fstream>
using namespace std;
ifstream f ("minim2.in");
ofstream g ("minim2.out");
int n;
double hip[100100], A, B, rec, s;
inline bool cmp (double a, double b){
return a > b;
}
inline int son1 (int dad){
return dad << 1;
}
inline int son2 (int dad){
return (dad << 1) + 1;
}
inline void schimba (int &a, int &b){
int c = a;
a = b;
b = c;
}
void makeHEAP (){
int poz = 1;
for (; ; ){
int fiu1 = son1 (poz), fiu2 = son2 (poz);
if (hip[fiu1] > hip[fiu2] && hip[fiu1] > hip[poz]){
double ZZ = hip[fiu1];
hip[fiu1] = hip[poz];
hip[poz] = ZZ;
schimba (fiu1, poz);
}
else
if (hip[fiu1] <= hip[fiu2] && hip[fiu2] > hip[poz]){
double ZZ = hip[fiu2];
hip[fiu2] = hip[poz];
hip[poz] = ZZ;
schimba (fiu2, poz);
}
else break ;
}
}
int main (){
f >> n;
for (int i = 1; i <= n; ++i) f >> hip[i], s += hip[i];
f >> A >> B >> rec;
sort (hip + 1, hip + n + 1, cmp);
s -= hip[1];
hip[1] = hip[1] * A;
s += hip[1];
int ps = 1;
while (s > rec){
makeHEAP ();
s -= hip[1];
hip[1] = hip[1] * B;
s += hip[1];
++ps;
}
g << ps - 1 << '\n';
g.close ();
return 0;
}