Pagini recente » Cod sursa (job #646706) | Cod sursa (job #3289297)
#include <fstream>
#include<deque>
#include<cmath>
#include<iomanip>
using namespace std;
ifstream fin("secv3.in");
ofstream fout("secv3.out");
const int NMax=30000;
double sumA[NMax+5];
double sumB[NMax+5];
double a[NMax+5];
double b[NMax+5];
deque<int>dq;
int main()
{
int n,l,r;
fin>>n>>l>>r;
for(int i=1; i<=n; i++)
{
fin>>a[i];
sumA[i]=sumA[i-1]+a[i];
}
for(int i=1; i<=n; i++)
{
fin>>b[i];
sumB[i]=sumB[i-1]+b[i];
}
double Max=0;
for(int i=1; i<=n; i++)
{
if(dq.size()<l)dq.push_back(i);
if(dq.size()<=r&&l<=dq.size())
{
int Front=dq.front();
double raport1=(sumA[i]-sumA[Front-1])/(sumB[i]-sumB[Front-1]);
double raport2=(sumA[i]-sumA[Front-1]-a[Front]+a[i])/(sumB[i]-sumB[Front-1]-b[Front]+b[i]);
if(raport1-raport2>0&&dq.size()<r)dq.push_back(i);
else if(raport2-raport1>0)
{
while(raport2-raport1>0&&dq.size()>l)
{
dq.pop_front();
raport1=(sumA[i]-sumA[dq.front()-1])/(sumB[i]-sumB[dq.front()-1]);
raport2=(sumA[i]-sumA[dq.front()-1]-a[dq.front()]+a[i])/(sumB[i]-sumB[dq.front()-1]-b[dq.front()]+b[i]);
}
dq.push_back(i);
}
if((sumA[i]-sumA[dq.front()-1])/(sumB[i]-sumB[dq.front()-1])>Max)Max=(sumA[i]-sumA[dq.front()-1])/(sumB[i]-sumB[dq.front()-1]);
}
}
fout<<fixed<<setprecision(2)<<Max;
return 0;
}