只有3分
#include<bits/stdc++.h>
using namespace std;
int n,l,r;//l是左指针,r是右指针
double a[100005],b[100005],ans,nub,nua;//ans用来存答案,nub又来存b灯泡的和,nua同理
bool cmp(double a,double b){
return a>b;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
}
sort(a+1,a+n+1,cmp);//从大到小
sort(b+1,b+n+1,cmp);//同上
for(r=1;r<=n;r++){//指针右移
r++;
nub+=b[r];//加b灯泡
ans=max(ans,min(nub-(l+r),nua-(l+r)));//比较
while(nua<nub&&l<n){//判断
nua+=a[l++];
ans=max(ans,min(nua-(l+r),nub-(l+r)));//更改答案
}
}
printf("%.4lf",ans);//输出
}