HDU 1155 Bungee Jumping
题意:英语水平太次…………读了好久好久好久才读懂OTZ
James Bond要逃跑,跑到一个桥边上,要跳到地面,桥边有个有弹性的绳子长度为l,如果他跳下去能到达地面,但速度超过10就会摔死,否则能成功降落,如果不能到达地面则被吊在绳子上(吐槽:为什么不看接近地面就直接跳下去= =)。桥的高度为s,人的重力为w × 9.81,绳的弹力为k × Δl。
解法:一个物理题……物理太渣算了好久……首先看绳长是不是比桥的高度长,如果绳更长则这个人一定会接触地,则在他接触地的时候没有弹力的作用,列出式子:1 / 2mv ^ 2 = mgh,解出速度,如果速度大于10则摔死,否则安全落地。
如果绳没有桥长,则算一下绳最长能抻多长,此时速度为0,重力势能等于弹性势能:mgh = 1 / 2k × l' ^ 2,解出绳最长长度l',如果l'没有桥长则这人被吊在绳上,否则算一下接触桥的时候的速度,大于10摔死,小于10存活,重力势能等于弹性势能加动能:mgh = 1 / 2mv ^ 2 + 1 / 2k × (h - l) ^ 2,解v。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include<stdio.h> #include<iostream> #include<algorithm> #include<string> #include<string.h> #include<math.h> #include<limits.h> #include<time.h> #include<stdlib.h> #include<map> #include<queue> #include<set> #include<stack> #include<vector> #define LL long long using namespace std; const double g = 9.81; int main() { double k, l, s, w; while (cin >> k >> l >> s >> w && !(k == 0 && l == 0 && s == 0 && w == 0)) { if (l >= s) { double v = sqrt (2 * g * s); if (v > 10) puts ( "Killed by the impact." ); else puts ( "James Bond survives." ); continue ; } double s1; s1 = sqrt (2 * w * g * s / k); if (s1 + l >= s) { double v; v = sqrt (2 * g * s - k * (s - l) * (s - l) / w); if (v > 10) puts ( "Killed by the impact." ); else puts ( "James Bond survives." ); } else puts ( "Stuck in the air." ); } return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步