E题对拍一晚上没拍出来,通过率0%!
我的E是先找最大的腰,就是大于等于2中最大的,将取出来的腰减2,然后再找底,直接遍历所有的边,在合法的底中找到最大的底,求三角形面积最大值
代码如下
#include<bits/stdc++.h>
using namespace std;
const int N=1000100;
int a[N];
int l[N];
int main(){
int T;
cin>>T;
while(T--){
int n;
scanf("%d",&n);
int t=0;
map<int,int> b;
for(int i=1;i<=n;i++){
scanf("%d%d",&(l[i]),&(a[i]));
b[l[i]]+=a[i];
if(b[l[i]]>=2){
t=max(t,l[i]);
}
}
if(t==0){
cout<<-1<<endl;//没有一对腰直接返回-1
continue;
}
b[t]-=2;
int res=0;
for(auto [x,y]:b){
if(y>0&&t*2>x){//找合法的最大的底边
res=max(res,x);
}
}
if(res==0) cout<<-1<<endl;//不合法返回-1
else{
double s=t*2+res;
s/=2;
double ans=sqrt(s*(s-res)*(s-t)*(s-t));
printf("%.15lf\n",ans);
}
}
return 0;
}
莉莉丝游戏公司福利 797人发布