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; }