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

全部评论
我就想知道错哪里了,求大佬告知解惑
点赞 回复 分享
发布于 2024-12-09 23:40 河北

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务