zoukankan      html  css  js  c++  java
  • 膨胀的木棍 (二分)

    【题目描述】

        

    【题目链接】

        http://noi.openjudge.cn/ch0111/09/

    【算法】

        奇怪的二分。。。可以列出关系式:LL = L * θ / sin(θ),众所周知X>=sin(X)根据图像显然X/sin(X)递增。所以可以视为LL=L*F(θ),又θ从0~π/2,所以当弦长一定时,角度越大,弧长越大,若弧长超过LL则修改右端点为mid反之修改左端点为mid。另实数域上的二分需设置精度或者用for循环定一个二分次数。同时,若θ过小,借助三角关系计算h会炸,所以一开始就判断若木棍增长小于设置的精度,直接输出0.000.

    【代码】

     

     1 #include <bits/stdc++.h>
     2 #define esp 1e-11
     3 using namespace std;
     4 double L,n,C,LL;
     5 int main()
     6 {
     7     scanf("%lf%lf%lf",&L,&n,&C);
     8     if(n*C<=esp) { printf("0.000
    "); return 0; }
     9     LL=(1+n*C)*L;
    10     double l=0,r=M_PI/2;
    11     while(r-l>esp) {
    12         double mid=(l+r)/2;
    13         if(mid/sin(mid)*L>LL) r=mid;
    14         else l=mid;
    15     }
    16     printf("%.3lf
    ",L*(1-cos(l))/2/sin(l));
    17     return 0;
    18 }
  • 相关阅读:
    C#学习-多态
    C#学习-子类的初始化顺序
    C#学习-面向对象
    Python数据类型知识点全解
    python 复制图片到剪贴板
    pyperclip
    pyautogui
    多线程代码案例
    常用正则表达式最强整理(速查手册)
    python os
  • 原文地址:https://www.cnblogs.com/Willendless/p/9363639.html
Copyright © 2011-2022 走看看