锰锌求助,真他丫的服了这个old6了
查看原帖
锰锌求助,真他丫的服了这个old6了
472950
封禁用户楼主2022/8/28 17:14

没过,第三个点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;
}
2022/8/28 17:14
加载中...