题目大意:给出一些建筑物的高度与宽度,求出一条最矮的抛物线运动轨迹,能够跨过所有的建筑物。

输出初速度与水平方向的夹角,以及初速度的大小。

重力加速度取9.8m/(s^2)

思路:

因为该抛物线过固定点(0,0)和(D,0)(D为所有建筑物宽度之和),故设抛物线方程为:

y = A * x * ( x - D )

建立直角坐标系,得到最高的那一圈点的坐标。

例如第二组样例:

5

0 10.5

20 11.5

25 10

10 15

0 7

其对应坐标为:

(10.500000, 20.000000)

(22.000000, 25.000000)

(32.000000, 25.000000)

(47.000000, 10.000000)

(54.000000,  0.000000)

从第一个点枚举到第 n-1 个点求得不同的A,分别验证是否满足条件,在满足条件的抛物线中选择顶点最小的那一条。

角度angle = arctan(抛物线在(0,0)点的导数);

运用高中物理知识……

(g*t*t) / 2 = 抛物线顶点高度  =>   求出 t

速度= g * t / sin(angle)

 1 #include <cstdio>
 2 #include <cmath>
 3
 4 const int MAXN = 100 + 10;
 5 const double INF = 1 << 30;
 6 const double PI = acos(-1);
 7
 8 struct point
 9 {
10     double x, y;
11 };
12
13 int n;
14 double A, D;
15 double maxHeight;
16 point P[MAXN];
17 double h[MAXN], d[MAXN];    //开始的时候一定要分开保存,我一开始直接读的点的坐标,结果WA了好几次
18
19 double getA( double x, double y )   //根据第三个坐标点得到A的值
20 {
21     return y / ( x * ( x - D ) );
22 }
23
24 double getY( double x, double tpA )  //根据当前的抛物线方程,给出横坐标x,返回纵坐标y
25 {
26     return tpA * x * ( x - D );
27 }
28
29 double Judge( double tpA )          //判断该抛物线是否满足条件
30 {
31     for ( int i = 1; i < n; i++ )
32     {
33         double tt = getY( P[i].x, tpA );
34         if ( tt < P[i].y ) return -1;   //如果该x对应抛物线上的y值 小于该点坐标的y值,则不符合条件
35     }
36
37     double pp = getY( D/2.0, tpA );
38     return pp;                     //若满足,返回最高点高度
39 }
40
41 void FindMin()
42 {
43     D = d[n];
44     maxHeight = INF;
45     for ( int i = 1; i < n; i++ )
46     {
47         double H;
48         double tpA = getA( P[i].x, P[i].y );
49
50         H = Judge( tpA );
51
52         if ( H > 0 && H < maxHeight )       //如果该抛物线符合条件,并且小于当前的最大值,则更新
53         {
54             maxHeight = H;
55             A = tpA;
56         }
57     }
58     return;
59 }
60
61 int main()
62 {
63     d[0] = h[0] = 0;
64
65     while ( scanf("%d", &n) != EOF )
66     {
67         double a;
68         for ( int i = 1; i <= n; i++ )
69         {
70             scanf("%lf%lf", &h[i], &a);
71             d[i] = d[i - 1] + a;
72         }
73
74         for ( int i = 1; i < n; i++ )         //得到最外面那一圈点的坐标
75         {
76             P[i].x = d[i];
77             P[i].y = h[i] > h[i + 1] ? h[i] : h[i + 1];
78         }
79
80         FindMin();
81
82         double angle = atan( - A * D );       //这里得到的角度是弧度,还应当转化一下
83
84         double temp = A * ( D/2.0 ) * ( D/2.0 - D );
85         double t = sqrt( temp / 4.9 );
86         double v = 9.8 * t / sin(angle) ;
87
88         printf("%.2f %.2f\n", angle * 180 / PI,  v);
89
90     }
91
92     return 0;
93 }

转载于:https://www.cnblogs.com/GBRgbr/archive/2012/07/26/2610660.html

ZOJ 1104 Leaps Tall Buildings相关推荐

  1. POJ ZOJ题目分类

    POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...

  2. POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)

    水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法:        (1)枚举 (1753,2965)       (2)贪心(13 ...

  3. ZOJ 题目分类,学校的一个巨巨做的。

     DP: 1011      NTA                    简单题 1013      Great Equipment        简单题 1024      Calendar ...

  4. poj题目详细分类及算法推荐题目

    DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题  ...

  5. ACM POJ 题目分类(完整整理版本)

    DP: 1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题   ...

  6. PUK ACM题目分类

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  7. pku,zju题目分类

    哎呦喂,直接ctrl+A了.话说浙江大学的题还见过的呢.. 公告: [意见反馈][官方博客]   ural pku Zju 题目分类 收藏   感谢 mugu 的提供.... Ural Problem ...

  8. HOJ题目分类//放这儿没事刷刷学算法!嘻嘻!

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  9. Firebug Console 与命令行全集

    Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),window 下面会注册一个叫做 console 的对象,它提供多种方法向控制台输出信息,供开发人员调 ...

最新文章

  1. view是怎么被展示在手机上的?
  2. 1.9 函数-C++编程模块
  3. rest_framework之解析器详解 05
  4. mysql七种join理论
  5. 五、JavaScript基础知识,学会操作元素的简单事件(一)
  6. CodeForces - 1498E Two Houses(交互+图论,结论题)
  7. python后台返回cookie_Django框架设置cookies与获取cookies操作详解
  8. C程序中对时间的处理——time库函数详解转
  9. 十大实用linux脚本,5个超实用的Shell脚本 - 米扑博客
  10. JavaScript编程规范-有利于效率和可读性
  11. C++中回调(CallBack)的使用方法
  12. java 日历_java的日历类(Calendar)详解
  13. wow模型修改器_wow模型修改器
  14. Debian10: 安装兄弟DCP-7080D打印机
  15. 《遥远的救世主》遵守客观规律(四)——文化属性
  16. Unity VR游戏教程
  17. Web渗透测试----4、常见解析漏洞
  18. 淘宝大数据量产品技术架构
  19. 高山大学2019级学员名单:但斌、王高飞、胡玮炜等入选
  20. 《解忧杂货店》 第一章 回答在牛奶箱里 -- 读后感

热门文章

  1. uniapp app蓝牙打印_给编程器加装蓝牙串口模块,用手机APP操作打印信息进控制台...
  2. chrome高级调试技巧总结
  3. 【机器视觉】VGG-16实现海贼王人物识别
  4. 使用c++开发excel插件(第4章编写一个完整的xll)
  5. 【steam】steam双击没反应
  6. 清华2022就业报告出炉!本硕毕业生超33%首选IT大厂,博士一半留京
  7. 语音芯片之字符串转语音
  8. 汕头大学的计算机专业就业如何,汕头大学好就业吗?附汕头大学就业率最高的专业名单...
  9. sequelize V5 升级记录
  10. QWidget中嵌入win32 window