Pagini recente » Cod sursa (job #6921) | Cod sursa (job #3183357) | Cod sursa (job #2119189) | Cod sursa (job #2917630) | Cod sursa (job #2632603)
#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>
using namespace std;
ifstream in ("secv3.in");
ofstream out("secv3.out");
struct tl
{
int p1, p2;
tl() {
p1=0; p2=0;
}
tl(int i, int j) {
p1=i; p2=j;
}
friend tl operator + (const tl ths, const tl that) {
return {ths.p1+that.p1, ths.p2+that.p2};
}
friend tl operator - (const tl ths, const tl that) {
return {ths.p1-that.p1, ths.p2-that.p2};
}
void operator +=(const tl that) {
p1+=that.p1; p2+=that.p2;
}
void operator -=(const tl that) {
p1-=that.p1; p2-=that.p2;
}
operator double() {
return ((double)p1)/p2;
}
friend bool operator <=(tl ths, tl that){
return ths.p1*that.p2<=ths.p2*that.p1;
}
};
int n, l1, l2, stact;
vector <tl> a;
double maxi=0;
inline tl getInterval(int st, int dr)
{
if(dr<st)
return {-1000, 1};
return a[dr]-a[st-1];
}
int main()
{
in>>n>>l1>>l2;
a.resize(n+5, {0, 0});
for(int i=1; i<=n; i++)
in>>a[i].p1;
for(int i=1; i<=n; i++)
in>>a[i].p2;
for(int i=2; i<=n; i++)
a[i]+=a[i-1];
stact=1;
for(int i=1; i<=n; i++)
{
if(stact+l2-1<i)
stact++;
if(i>=l1)
{
if(getInterval(stact, i)<=getInterval(i-l1+1, i))
stact=i-l1+1;
maxi=max(maxi, (double)getInterval(stact, i));
}
}
out<<fixed<<setprecision(2)<<maxi;
return 0;
}