HDU 2298 Toxophily 【三分算法 or 直接推导物理公式】
http://acm.hdu.edu.cn/showproblem.php?pid=2298
题目大意:Bob在(0,0)点想射在(x, y)点的水果,初始的速度为v(已知), g=9.8, 求最小的角度射到苹果.
解题思路:
---直接推到物理公式:
将速度的分解为x方向和y方向,然后列出式子
1> x=vcosθ* t ----变形---> t=x/vcosθ
2> y=vsinθ*t -g*t*t/2
将t的函数带入2>式中得 y=tanθ* x-g*x*x/(2*v*v*cos^2θ) ---3式
1/cos^2θ=(sin^2θ+cos^2θ)/cos^2θ= 1+tan^2θ ----带入3式中,得:
g*x*x*tan^2θ-2*v*v*x*tanθ+g*x*x+2*v*v*y=0
将tanθ看成是未知数,那么a=g*x*x, b=-2*v*v*x, c=2*v*v*y+g*x*x;
Δ=b^2-4ac 先进行判断是否有根。如果没有根输出-1,否则根据求根公式
X1=[-b+Δ^(1/2)]/2a
X2=[-b-Δ^(1/2)]/2a
如果求的解不在[0. Π/2]内还是算无解。
代码如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
/* 直接推导物理公式*/#include<stdio.h> #include<math.h> #define pi acos(-1) #define g 9.8 int main() {int T;double x, y, v;scanf("%d", &T);while(T--){scanf("%lf%lf%lf", &x, &y, &v);double dd, x1, x2, a, b, c;a=g*x*x, b=-2*v*v*x, c=2*v*v*y+g*x*x;dd=b*b-4*a*c;if(dd<0)printf("-1\n");else{x1=atan((-1*b+sqrt(dd))/(2*a));x2=atan((-1*b-sqrt(dd))/(2*a));if((x1<0||x1>pi/2)&&(x2<0||x2>pi/2))printf("-1\n");else if(x1<0||x1>pi/2)printf("%.6lf\n", x2);else if(x2<0||x2>pi/2)printf("%.6lf\n", x1);elseprintf("%.6lf\n", x1>x2?x2:x1);}}return 0; }
---三分+二分算法
--三分+二分算法
问题1》三分什么变量满足凸(凹)型函数?目的三分出什么结果
问题2》cal()里面的公式放什么,怎么推到的?
我们可以知道当θ变幻时,落在横坐标为x处的y点左边是变化的,而且呈凸形变化(我不知道怎么去证明),因此三分的对象就是θ,三分出的结果就是找出很逼近y值的角度θ。
cal()函数放的就该是根据θ,求的的y’的值,物理公式推导出y=x*tan(θ)-g*x*x/(2*v*v*cos(θ)*cos(θ));
double cal(double t)
{
return x*tan(t)-g*x*x/(2*v*v*cos(t)*cos(t));
}
PS:不得不承认画图能力很差。
然后求出的θ还要进行二分它,因为这个θ就相当于A点附近的点,即f(θ)>=y,我们从[0, θ]进行二分求出一个很接近f(θ1)~~y的θ1即相当于图中的B点。
三分+二分算法代码如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
转载于:https://www.cnblogs.com/Hilda/archive/2013/03/02/2939797.html
HDU 2298 Toxophily 【三分算法 or 直接推导物理公式】相关推荐
- layer output 激活函数_一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)...
在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...
- 四旋翼姿态解算——互补滤波算法及理论推导
转载请注明出处:http://blog.csdn.net/hongbin_xu 或 http://hongbin96.com/ 文章链接:http://blog.csdn.net/hongbin_xu ...
- BP算法:原理推导数据演示项目实战1(转)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fendouaini/article/details/79789440 </div>< ...
- 一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)
在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...
- 【 反向传播算法 Back-Propagation 数学推导以及源码详解 深度学习 Pytorch笔记 B站刘二大人(3/10)】
反向传播算法 Back-Propagation 数学推导以及源码详解 深度学习 Pytorch笔记 B站刘二大人(3/10) 数学推导 BP算法 BP神经网络可以说机器学习的最基础网络.对于普通的简单 ...
- 【机器学习】算法原理详细推导与实现(七):决策树算法
[机器学习]算法原理详细推导与实现(七):决策树算法 在之前的文章中,对于介绍的分类算法有逻辑回归算法和朴素贝叶斯算法,这类算法都是二分类的分类器,但是往往只实际问题中yyy不仅仅只有{0,1}\{0 ...
- Collapsed Variational Inference(Collapsed变分推断)算法以LDA推导为例
本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 文章目录 简介 LDA变分推断 LDA的Collapse ...
- EM算法的原理推导及解释
文章目录 EM算法的原理推导及解释 前置知识:极大似然估计(Maximum Likelihood) 核心部分:期望最大化算法(Expectation Maximum) 实例:EM求解"三硬币 ...
- Adaboost算法的原理推导及解释
文章目录 Adaboost算法的原理推导及解释 前置知识:Boosting概述 Boosting方法的基本思想 Boosting方法的的学习方法 核心部分:Adaboost算法的原理推导和解释 Ada ...
最新文章
- Django 的模板语法之过滤器
- 程序员面试题精选100题(10)-排序数组中和为给定值的两个数字[算法]
- 正式版Android P,喜大普奔!一加6正式推送Android P正式版
- Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor
- oracle按照指定顺序读取,oracle按照指定顺序进行排序
- 用源生的JavaScript编写一个异步的ajax库
- 用大数据看程序员,让你见到不为人知的一面!
- nginx 支持php扩展,Nginx和php安装及配置五之LINUX用PHPIZE安装PHP GD扩展
- matlab中的种子数seed,set.seed()设置种子到底是啥作用?
- 每周更新学习进度表--第九周
- iOS UINavigationBar-导航栏、UINavigationItem-导航项
- python深浅复制_python3 深浅拷贝(复制)
- 金山终端安全系统任意文件上传漏洞附poc(新鲜趁热)
- 采用sFlow工具实现流量监控--实验
- 16个千兆光口8个千兆Combo光电复用口管理型工业以太网交换机环网+WEB管理+SNMP+VLAN
- 如何利用单片机的ADC模块(或者独立的ADC芯片)得到接入ADC管脚上的实际电压值?
- MichiGAN:Multi-Input-Conditioned Hair Image Generation for Portrait Editing---论文阅读笔记
- java 替换文件中的字符串
- 论文成功写作技巧之行之有效的写作从“结果”开始(上)
- 计算机管理 没有适当的权限,XP更改不了系统时间提示“您没有适当的特权级”是怎么回事...