1 条题解

  • 0
    @ 2025-3-9 21:39:45

    我太难了 这题居然是普及+/提高(绿题) 清华集训 2015 还有三分 废话少说,上代码

    #include<bits/stdc++.h>
    #define MAXN 100000
    using namespace std;
    int n;
    double H,h,D;
    double ask(double x) {//返回大的那种情况 
        if(x<=h*D/H) return x+(H-(H-h)*D/(D-x));
        else return x-D+((D-x)*H/(H-h));
    }
    void three_cut() {//三分,具体原理不懂可以去看模板题题解 
    	double l=0,r=MAXN;
    	while(r-l>=0.0000001) {
    		double lmid=l+(r-l)/3;
    		double rmid=r-(r-l)/3;
    		if(ask(lmid)>ask(rmid)) r=rmid;
    		else l=lmid;
    	}
    	printf("%.3lf\n",ask(l));
    }
    
    int main(void) {
    	scanf("%d",&n);
    	for(int i=0;i<n;i++) {
    		scanf("%lf%lf%lf",&H,&h,&D);
    		three_cut();
    	}
    	return 0; 
    } 
    
    • 1

    信息

    ID
    362
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者