CSU OJ 2148 梦皮神

Description

Wells最近经常做一些有皮神出现的梦。

在这一次梦中Wells把皮神(Pikachu)弄丢了,Wells在一个正 N 边形区域的中心开始自闭,Wells想找回皮神,同时皮神也在尝试找回Wells。

皮神为了确保不会找不到Wells,皮神在正 NN 边形最外围的每个顶点上都放置了一个分身。分身按照顺时针方向,用 1...N1...N 标号,每个分身 ii 都会朝 i+1i+1 号分身以一个固定的速度移动,移动方向会随着 i+1i+1 位置变化而变化,一直到某个分身在运动时视线中出现Wells,皮神才会停下来,并扑上去给Wells一个Warming的抱抱(还可以顺便电几下……)。

现在,皮神想知道,最糟糕的情况下她需要多少时间才能够找回Wells。

Input

多组数据,组数不超过 10001000 组

对于每组数据给出一行,每行三个整数 N,A,VN,A,V 分别表示正多边形区域的边数,正多边形区域的边长, 皮神的每个分身移动的速度

N<=300,A<=400000,V<=10000N<=300,A<=400000,V<=10000

Output

对于每组数据输出一行,每行包含一个实数,表示最坏情况下皮神寻找的时间,保留小数点后 55 位。

当答案的绝对误差或者相对误差小于 0.010.01 % ,即10410−4 被认为与答案相同。

ps:不必纠结单位的问题

Sample Input

3 10 5
4 20 8

Sample Output

1.33333
2.50000
题解:这是一个追击问题,图形由大道小,直到为一个点,形状不变;可以考虑前一个追后一个,将速度分解:
参考代码:
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 #define PI acos(-1)
 7 int main()
 8 {
 9     int N;
10     double A,V,X;
11     while(scanf("%d%lf%lf",&N,&A,&V)!=EOF)
12     {
13         X=PI*(N-2)/(2.0*N);
14         if(N==3) printf("%.5lf
",A/(2.0*V*cos(X)*cos(X)));
15         else printf("%.5lf
",A/(2.0*V*cos(X)*cos(X)));    
16     }
17     
18     return 0;
19 }
View Code
原文地址:https://www.cnblogs.com/csushl/p/9498424.html