POJ Challenge Round 5

A:magic

总时间限制:1000ms内存限制:131072kB描述

魔法师Silly Hook正在表演一个神奇的魔术,他变出了他自己的N个分身,并成正N边形分布,他本身处于这个正N边形的中心,正N边形的边长为A。然后,每个分身都会朝顺时针方向下一个分身以一个相同的固定的速度V移动,移动方向会随着下一个分身的位置变化而变化,最终所有分身都将到达正N边形的中心,也就是回到Silly Hook本身,表演结束。

Silly Hook计划在比利时埃诺省Silly市巡回演出,他想提前知道对于每次表演需要多少时间。

输入多组数据,到EOF结束。每组数据一行三个整数N,A,V,分别表示 每次表演的分身个数,分身分布的正N边形的边长,每个分身移动的速度。N ≤ 300 , A ≤ 400000 , V ≤ 10000 , 答案 ≤ 10000000 , 数据组数 ≤ 10输出每组数据一个实数,,表示最后一个分身到达本身的时间,保留小数点后5位。样例输入3 10 54 20 8样例输出1.333332.50000

思路:把每一个分身抽象为一个点,取其中两个点A,B(A始终朝向B),则对B的速度v做正交分解,取其中一个与正多边形的边平行的速度,这样可以转化为一个简单的追及问题,而B另外一个分解的速度则不影响答案,它只影响偏转速度。

AC代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>using namespace std;const double PI = 4.0 * atan(1.0);int N, A, V;int main() {while(cin >> N >> A >> V) {double du = PI * (N – 2) / N;double ans = A * 1.0 / (V * 1.0 + cos(du) * V);printf("%.5lf\n", ans);}return 0;}

绊住的不仅是双脚,还有未来。

POJ Challenge Round 5

相关文章:

你感兴趣的文章:

标签云: