Pagini recente » Cod sursa (job #2676516) | Cod sursa (job #2568679) | Cod sursa (job #232947) | Cod sursa (job #2327825) | Cod sursa (job #465893)
Cod sursa(job #465893)
#include<stdio.h>
#include<stdlib.h>
struct KeepTight{
float drum;
bool apply;
};
int n;
KeepTight DrumP[100001];
double pwr,scout,limmit;
void OpenGate()
{
freopen("minim2.in","r",stdin);
freopen("minim2.out","w",stdout);
}
void GetData()
{
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%d",&DrumP[i].drum);
scanf("%f%f%f",&pwr,&scout,&limmit);
}
inline int cmp(const void *a,const void *b)
{
KeepTight x,y;
x=*(KeepTight *)a;
y=*(KeepTight*)b;
if(x.drum<y.drum)
return 1;
if(x.drum>y.drum)
return -1;
if(x.drum==y.drum)
return 0;
}
inline double abs(double a, double b)
{
a=a-b;
return (a<0)?-a:a;
}
inline void Recalc(double &sum)
{
sum=0;
for(int i=0;i<n;++i)
sum+=DrumP[i].drum;
}
void GoProcess()
{
int i=0,OP=0;
double tsum=0;
while( tsum>limmit || abs(limmit-tsum)==0.000001 && i<n )
{
if(!DrumP[i].apply)
{
DrumP[i].drum*=pwr;
Recalc(tsum);
++OP;
continue;
}
if(DrumP[i].drum>DrumP[i+1].drum)
if(DrumP[i].drum-DrumP[i+1].drum>DrumP[i+1].drum)
{
++OP;
DrumP[i].drum*=scout;
Recalc(tsum);
}
else
++i;
else
qsort(DrumP,n,sizeof(DurmP[0]),cmp);
}
printf("%d",OP);
}
int main()
{
OpenGate();
GetData();
qsort(DrumP,n,sizeof(DurmP[0]),cmp);
GoProcess();
return 0;
}