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]内还是算无解。

代码如下:

View Code

/*
直接推导物理公式*/#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点。

三分+二分算法代码如下:

View Code

转载于:https://www.cnblogs.com/Hilda/archive/2013/03/02/2939797.html

HDU 2298 Toxophily 【三分算法 or 直接推导物理公式】相关推荐

  1. layer output 激活函数_一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)...

    在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...

  2. 四旋翼姿态解算——互补滤波算法及理论推导

    转载请注明出处:http://blog.csdn.net/hongbin_xu 或 http://hongbin96.com/ 文章链接:http://blog.csdn.net/hongbin_xu ...

  3. BP算法:原理推导数据演示项目实战1(转)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fendouaini/article/details/79789440 </div>< ...

  4. 一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)

    在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...

  5. 【 反向传播算法 Back-Propagation 数学推导以及源码详解 深度学习 Pytorch笔记 B站刘二大人(3/10)】

    反向传播算法 Back-Propagation 数学推导以及源码详解 深度学习 Pytorch笔记 B站刘二大人(3/10) 数学推导 BP算法 BP神经网络可以说机器学习的最基础网络.对于普通的简单 ...

  6. 【机器学习】算法原理详细推导与实现(七):决策树算法

    [机器学习]算法原理详细推导与实现(七):决策树算法 在之前的文章中,对于介绍的分类算法有逻辑回归算法和朴素贝叶斯算法,这类算法都是二分类的分类器,但是往往只实际问题中yyy不仅仅只有{0,1}\{0 ...

  7. Collapsed Variational Inference(Collapsed变分推断)算法以LDA推导为例

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 文章目录 简介 LDA变分推断 LDA的Collapse ...

  8. EM算法的原理推导及解释

    文章目录 EM算法的原理推导及解释 前置知识:极大似然估计(Maximum Likelihood) 核心部分:期望最大化算法(Expectation Maximum) 实例:EM求解"三硬币 ...

  9. Adaboost算法的原理推导及解释

    文章目录 Adaboost算法的原理推导及解释 前置知识:Boosting概述 Boosting方法的基本思想 Boosting方法的的学习方法 核心部分:Adaboost算法的原理推导和解释 Ada ...

最新文章

  1. Django 的模板语法之过滤器
  2. 程序员面试题精选100题(10)-排序数组中和为给定值的两个数字[算法]
  3. 正式版Android P,喜大普奔!一加6正式推送Android P正式版
  4. Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor
  5. oracle按照指定顺序读取,oracle按照指定顺序进行排序
  6. 用源生的JavaScript编写一个异步的ajax库
  7. 用大数据看程序员,让你见到不为人知的一面!
  8. nginx 支持php扩展,Nginx和php安装及配置五之LINUX用PHPIZE安装PHP GD扩展
  9. matlab中的种子数seed,set.seed()设置种子到底是啥作用?
  10. 每周更新学习进度表--第九周
  11. iOS UINavigationBar-导航栏、UINavigationItem-导航项
  12. python深浅复制_python3 深浅拷贝(复制)
  13. 金山终端安全系统任意文件上传漏洞附poc(新鲜趁热)
  14. 采用sFlow工具实现流量监控--实验
  15. 16个千兆光口8个千兆Combo光电复用口管理型工业以太网交换机环网+WEB管理+SNMP+VLAN
  16. 如何利用单片机的ADC模块(或者独立的ADC芯片)得到接入ADC管脚上的实际电压值?
  17. MichiGAN:Multi-Input-Conditioned Hair Image Generation for Portrait Editing---论文阅读笔记
  18. java 替换文件中的字符串
  19. 论文成功写作技巧之行之有效的写作从“结果”开始(上)
  20. 计算机管理 没有适当的权限,XP更改不了系统时间提示“您没有适当的特权级”是怎么回事...

热门文章

  1. cassss服务未启动_不要再本地启动项目调试了,试SpringBoot远程调试你会发现新大陆!...
  2. html2canvas截图只截取当前可视区域的问题
  3. 面试题-java基本数据类型和运算符
  4. VB在XP/2K 任务管理器的进程列表中隐藏当前进程
  5. AlphaZero完胜三大世界冠军棋类程序:5000个TPU、自学一天
  6. (十四)函数参数和返回值
  7. vue生命周期整理学习
  8. Linux awk用法
  9. linux下超简单的ntp时间服务器
  10. java方法:flush()