POJ Challenge Round 5 -- A:magic (物理)

来源:互联网 发布:那英人品知乎 编辑:程序博客网 时间:2024/06/07 14:04

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;} 














1 0
原创粉丝点击