ZOJ 1104 Leaps Tall Buildings
题目大意:给出一些建筑物的高度与宽度,求出一条最矮的抛物线运动轨迹,能够跨过所有的建筑物。
输出初速度与水平方向的夹角,以及初速度的大小。
重力加速度取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相关推荐
- POJ ZOJ题目分类
POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...
- POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)
水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法: (1)枚举 (1753,2965) (2)贪心(13 ...
- ZOJ 题目分类,学校的一个巨巨做的。
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar ...
- poj题目详细分类及算法推荐题目
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 ...
- ACM POJ 题目分类(完整整理版本)
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 ...
- PUK ACM题目分类
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- pku,zju题目分类
哎呦喂,直接ctrl+A了.话说浙江大学的题还见过的呢.. 公告: [意见反馈][官方博客] ural pku Zju 题目分类 收藏 感谢 mugu 的提供.... Ural Problem ...
- HOJ题目分类//放这儿没事刷刷学算法!嘻嘻!
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- Firebug Console 与命令行全集
Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),window 下面会注册一个叫做 console 的对象,它提供多种方法向控制台输出信息,供开发人员调 ...
最新文章
- view是怎么被展示在手机上的?
- 1.9 函数-C++编程模块
- rest_framework之解析器详解 05
- mysql七种join理论
- 五、JavaScript基础知识,学会操作元素的简单事件(一)
- CodeForces - 1498E Two Houses(交互+图论,结论题)
- python后台返回cookie_Django框架设置cookies与获取cookies操作详解
- C程序中对时间的处理——time库函数详解转
- 十大实用linux脚本,5个超实用的Shell脚本 - 米扑博客
- JavaScript编程规范-有利于效率和可读性
- C++中回调(CallBack)的使用方法
- java 日历_java的日历类(Calendar)详解
- wow模型修改器_wow模型修改器
- Debian10: 安装兄弟DCP-7080D打印机
- 《遥远的救世主》遵守客观规律(四)——文化属性
- Unity VR游戏教程
- Web渗透测试----4、常见解析漏洞
- 淘宝大数据量产品技术架构
- 高山大学2019级学员名单:但斌、王高飞、胡玮炜等入选
- 《解忧杂货店》 第一章 回答在牛奶箱里 -- 读后感
热门文章
- uniapp app蓝牙打印_给编程器加装蓝牙串口模块,用手机APP操作打印信息进控制台...
- chrome高级调试技巧总结
- 【机器视觉】VGG-16实现海贼王人物识别
- 使用c++开发excel插件(第4章编写一个完整的xll)
- 【steam】steam双击没反应
- 清华2022就业报告出炉!本硕毕业生超33%首选IT大厂,博士一半留京
- 语音芯片之字符串转语音
- 汕头大学的计算机专业就业如何,汕头大学好就业吗?附汕头大学就业率最高的专业名单...
- sequelize V5 升级记录
- QWidget中嵌入win32 window