没过,第三个点WA
#include<bits/stdc++.h>
#define db double
#define maxn 2005
using namespace std;
int n,a,b;
db u[maxn],v[maxn],w[maxn],ans,ev,mif=1e-8;
int tu;
db max1(db E,db F){
if(E<F)return F;
return E;
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++)cin>>u[i];
for(int i=1;i<=n;i++)cin>>v[i];
for(int i=1;i<=n;i++)w[i]=u[i]+v[i]-u[i]*v[i];
db uL=0,uR=1;
while(uR-uL>mif){
db vL=0,vR=1,umd=(uL+uR)/2;
while(vR-vL>mif){
db vmd=(vL+vR)/2,uct=0,vct=0;
ev=vmd,ans=0;
for(int i=1;i<=n;i++){
db mxm=max1(max1(w[i]-umd-vmd,v[i]-vmd),max1(u[i]-umd,0));
ans+=mxm;
if(abs(mxm)<mif)continue;
else if(abs(mxm-u[i]+umd)<mif)uct++;
else if(abs(mxm-v[i]+vmd)<mif)vct++;
else uct++,vct++;
}
tu=uct;
if(vct<=b)vR=vmd;
else vL=vmd;
}
if(tu<=a)uR=umd;
else uL=umd;
}
printf("%lf",ans+uL*a+ev*b);
return 0;
}