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

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 5
4 20 8
样例输出
1.33333
2.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;
} 














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值