专题I_J个人解题报告-二分

J题:POJ 1905-二分

做这个题做到怀疑智商了QAQ

分析:
由题意已知:L ,s ,0<h<L/2 ; 求 h;
在这里插入图片描述

在这里插入图片描述

那么知道S(R(h))的单调性就可以知道用二分还是三分求解了;

下面是错误分析(这段分析真的还以自己还有没有智商了)
根据 h 的范围;我对①式中的 h 求导;得出 r 随 h 的增大而减小(即单调减函数);然后我一看②式妥妥的单调增函数啊;然后我就判定这个复合函数为单调减函数了。
但是我突然发现我运行样例的时候,???,怎么都不对,我就去翻别人的题解,从别人的代码里我发现一个问题,就是这个复合函数是单调增的,然后我质疑了自己的思路,没问题啊,又求了很多次导;终于发现woc,那个式子②他不是单增啊,然后又发现,我不会求这个函数;

所以正确的分析应该是这样的:
h 增加,那个弧长一定是增加的啊,也就是我那个复合函数是单增的。woc我在想什么????想求导想疯了;

但翻别人写的题解的时候,我还是有收获的:
就是二分的时候精度问题:还可以通过直接二分100次解决,但是感觉不靠谱,我三分用了100,直接TLE了,别人的二分100次;但是吧现在还没遇到卡精度卡那么高的题,等以后吃亏了再来写写这个while(100);

#include <iostream>
#include <cmath>
using namespace std;

double L,n,c;

double f(double h){
	double r=(4*h*h+L*L)/(8*h);
	return 2*r*asin(L/(2*r));
}

double Bifi(double l,double r,double s){
	while(r-l>1e-6){
		double mid=(r+l)/2;
		if( s>f(mid) )l=mid;
		else r=mid;
	}
	return (r+l)/2;
}

int main(){
	while(scanf("%lf%lf%lf",&L,&n,&c)){
		if(L<0&&n<0&&c<0)break;
		double s=(1+n*c)*L;
		printf("%.3f\n",Bifi(0.0,L/2,s));
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值