POJ Expanding Rods
2024-08-31 23:19:03
题目大意
给定L,n,C,L为红色线段,L(1+n*C)为绿色弧,求两者中点的距离
二分圆心角度数,接下来就是几何的能力了
根据正弦定理,可得:
Lsinθ=rsin(90°−θ)
则弧长:
a=πr⋅θ180
将a与nL作比较来二分
精度满天飞 QWQ
代码如下:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
double pi=3.1415926535897932384626433832795,eps=0.000000001;
double L,C,n,nL;
using namespace std;
double work(double mid)
{
double a1=sin(2*pi*mid/360),a2=sin(2*pi*(90-mid/2)/360);
double r=L/a1*a2;
return 2*r*pi*mid/360;
}
int main()
{
while(scanf("%lf%lf%lf",&L,&n,&C))
{
if(L==-1&&n==-1&&C==-1)return 0;
nL=(1+n*C)*L;
if(nL==L){printf("0.000\n");continue;}
double l=0,r=180,mid;
while(r-l>eps)
{
mid=(l+r)/2;
if(work(mid)<nL)l=mid;
else r=mid;
}
printf("%.3lf\n",L/sin(2*pi*l/360)*sin(2*pi*(90-mid/2)/360)-sqrt(pow(L/sin(2*pi*l/360)*sin(2*pi*(90-mid/2)/360),2)-pow(L/2,2)));
}
}
最新文章
- android存储方式的应用场景
- CentOS一键ftp
- 编写简单的ramdisk(选择IO调度器)
- 【温故Delphi】双击工程文件打开软件
- nodejs学习笔记三——nodejs使用富文本插件ueditor
- js实现身份证号码验证
- gpt格式下通过U盘装win7系统
- sftp 设置仅能访问自己目录的用户
- jszs 历史管理
- Group 原则
- 使用 .NET 平台,如何玩转 Universal Windows 应用?
- noip 2009 道路游戏
- hdu 4739【位运算】.cpp
- 前端学习之HTML
- SourceInsight宏插件2(非常好用,强力推荐)
- 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows(01分数规划)
- 【bzoj 2002】弹飞绵羊
- 在vue-cli项目中使用bootstrap的方法示例
- JAVA获取程序(打成jar或classpath)所在目录
- BinaryReader 自己写序列化
热门文章
- dotnet Framework 源代码 · Ink
- 2018宁夏邀请赛 L Continuous Intervals(单调栈+线段树)
- Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie
- UE4 中的 C++ 与 蓝图交互
- QP移植
- 数据多js平均时间取固定条数展示,echarts数据多处理数据
- python类中的一些神奇方法
- JavaScript数组的方法 | 学习笔记分享
- Vue+Element实现网页版个人简历系统
- Java图形打印 上下对称三角星