龙龙跳跳跳
Case Time Limit: 100 MS (Others) / 200 MS (Java) Case Memory Limit: 256 MB (Others) / 512 MB (Java)
Accepted: 155 Total Submission: 2223
查看我的提交显示标签
Problem Description
当电脑没有网络时,打开Chrome浏览器会发现一个恐龙小游戏:
按空格之后就可以开始玩:
你的任务是操纵一只呆萌的小恐龙来穿越沙漠。每次你按一下空格,小恐龙就会跳一下,形成一个完美的倒抛物线,并且每次跳跃的纵向距离和横向距离都是一样的。但是在沙漠中会有很多仙人掌,天上还会飞一些翼龙,你需要让你的小恐龙通过跳跃来避开这些仙人掌和翼龙,这就是整个游戏过程。
为了问题的简化,我们假设这是一个二维直角坐标系,恐龙在X轴上从左往右匀速运动。当恐龙从起跳点a处跳跃时,它将会跳出一个完美的倒抛物线,并且落地点与起跳点的距离为x,其跳起后的纵向最大高度为y。仙人掌为一根垂直于X轴的线段,且底部在X轴上,横坐标为b,高度为h,如下图所示。为了简便,本题不考虑恐龙的体型,不考虑仙人掌的宽度,也不考虑天上飞的翼龙。
现在给出小恐龙的起跳横坐标a、横向跳跃距离x、纵向跳跃高度y、仙人掌根部横坐标b、仙人掌高度h,问在此次跳跃中龙龙是否能顺利避开仙人掌。假设刚好擦到也算碰到。
Input
每个输入文件一组数据。
每组数据给出五个小数点后最多一位的浮点数a、x、y、b、h(-100 <= a <= 100, 0 < x <= 100, 0 < y < 100, -100 <= b <= 100, 0 < h <= 100),用空格隔开。
Output
如果在此次跳跃中龙龙能顺利避开仙人掌,那么输出YES,否则输出NO。
Sample Input 1
-1 2 2 0 1
Sample Output 1
YES
Sample Input 2
-1 2 2 0 3
Sample Output 2
NO
Author
Shoutmon
Source
18浙大考研机试模拟赛
#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <iostream>
#include <cmath>
using namespace std;
#define eps 1e-8
#define More(a,b) (((a) - (b)) > (eps))
#define Less(a,b) (((a) - (b)) < (-eps))
int main() {
#ifdef _DEBUG
freopen("data.txt", "r+", stdin);
#endif // _DEBUG
std::ios::sync_with_stdio(false);
double a, x, y, b, h;
double k, c;
cin >> a >> x >> y >> b >> h;
if (Less(b, a) || More(b, a + x))
{
cout << "YES";
return 0;
}
k = -4 * y / (x * x);
c = y;
double e = k * pow((b - (a + x / 2)), 2) + c;
if (More(e,h)) cout << "YES";
else cout << "NO";
return 0;
}