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 % ,即10−410−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\n",A/(2.0*V*cos(X)*cos(X))); 15 else printf("%.5lf\n",A/(2.0*V*cos(X)*cos(X))); 16 } 17 18 return 0; 19 }