1 条题解

  • 1
    @ 2025-3-7 12:54:14

    这道题你首先需要证明 F(x)F(x) 是一个单谷函数


    证明:证明:

    反证法。

    假设 F(x)F(x) 有两个谷,那么大概长这样:

    显然不满足 F(x)=maxSiF(x) = max{S_i} ,假设不成立

    证毕证毕


    接下来就用一个简单的三分……

    什么,你说你不会三分?那好吧,点这个


    下面放一个AC代码,注释写在解释里

    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    
    struct fuc{
    	int a,b,c;
    }f[100005];
    
    int T,n;
    double l,r,mid,l_mid,r_mid;
    
    double check(double x){//计算 F(x)
    	double ans=-2100000000;
    	for (int i=1;i<=n;i++){
    		ans=max(ans, f[i].a*x*x + f[i].b*x + f[i].c); 
    	}
    	return ans;
    }
    
    int main(){
    	scanf("%d",&T);
    	while (T--){
    		scanf("%d",&n);
    		for (int i=1;i<=n;i++){
    			scanf("%d%d%d",&f[i].a,&f[i].b,&f[i].c);
    		}
    		l=0,r=1000;
    		while (r-l>1e-9){ //精度要注意一下,因为题目要输出的是 F(x) 的值
    			mid=(l+r)/2; l_mid=mid-(r-l)/10; r_mid=mid+(r-l)/10;
    			if (check(l_mid)>check(r_mid)){
    				l=l_mid;
    			}
    			else r=r_mid;
    		}
    		printf("%.4lf\n",check(l));
    	}
    	return 0;
    } 
    
    
    • 1

    信息

    ID
    63
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    17
    已通过
    12
    上传者