1 solutions
-
0
P1123. 飞行执照 题解
题意概述
带着风之翼滑行,风之翼会提供升力,荧视为质点处理。以一定的初速度,于原点飞出去。
飞行通过半径为 1 光圈即算。最后通过光圈数占总光圈数60%及以上输出Yes否则输出No。
题意分析
不难看出,这是一个平抛运动:
- 有初速度
- 中间过程受力恒定(忘了写忽略空气阻力,抱歉)
平抛运动就要考虑速度分解(刚读完高中的你们比我厉害吧 /狗头)。我们建立一个坐标系,以出发点为原点,速度方向为 x 轴正方向,下落方向为 y 轴正方向。
对速度做分解,用 x 计算下落总时长,并且利用这个时长通过时间位移公式得出下落高度,下落高度与光圈中心位置的差值小于等于 1 即可通过该光圈。
这个题还有些细节问题,欢迎私聊我讨论
可行代码
#include <math.h> #include <stdio.h> int M = 45; // 体重 double g = 9.8; // 重力加速度 int r = 1; // 光圈半径 int F = 300; // 升力 double a = (M * g - F) / M; // 最终合力的加速度 int main() { int T; scanf("%d", &T); while (T--) { int v0, m;// 初速度,光圈数 scanf("%d%d", &v0, &m); int pointx[m], pointy[m]; for (int i = 0; i < m; i++) { scanf("%d%d", &pointx[i], &pointy[i]); } int cnt = 0; for (int i = 0; i < m; i++) { double t = pointx[i] * 1.0 / v0; double h = (1 / 2.0) * a * t * t; if (fabs(h - pointy[i]) <= r) cnt++; } if (cnt * 1.0 / m >= 0.6) printf("Yes\n"); else printf("No\n"); } return 0; }
END 最后,欢迎所有通过选拔的同学来到ACM,也祝愿别的同学在编程这条路上持之以恒,加油,希望未来赛场上能够再见到你们!
Information
- ID
- 138
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 9
- Tags
- # Submissions
- 134
- Accepted
- 14
- Uploaded By