题目描述
牛牛战队里,不仅有训练,也有追逐。
牛牛和牛能总是想知道谁更秀一点,他们通常会去比谁的代码更秀,谁的成绩更秀……
这一次,他们开始比谁的走位更秀。他们来到一个半径为r的圆上,画了圆内接的正nn边形。为了秀走位,他们只允许自己在多边形的边上移动。
同时,他们随便选取正n边形的一个顶点为1号顶点,按顺时针的顺序把其他的点叫做2号顶点,3号顶点……一开始,两人分别在ii号顶点和jj号顶点。
现在,牛牛要一边沿着多边形的边秀走位,一边走向牛能。他想知道,他最短要走多少距离才能走到牛能的旁边?
输入描述:
输入数据共22行,第一行有两个整数 ,表示在半径为r的圆上画了一个内接nn边形。
第二行有两个整数 ,表示牛牛一开始在i号顶点,牛能一开始在j号顶点。
输出描述:
一个小数x,表示牛牛要移动的最短距离。
如果你的答案是a,标准答案是b,如果 ,你的答案将被判定为正确。
输入
4 1
1 2
输出
1.414214
题解
-
先求一条边的边长。如图, 边形对应的 ,边长就是
-
再求i到j最短经过几条边:
-
最后答案就是
AC-Code
#include <bits/stdc++.h>
using namespace std;
#define PI acos(-1)
int main() {
int n, r; while (cin >> n >> r) {
double ans = 0;
int i, j; cin >> i >> j;
if (i > j) swap(i, j);
int dt = min(i + n - j, j - i);
printf("%.6f\n", dt * 2.0 * r * sin(PI / n));
}
return 0;
}