[2024-05-31]Amr and Pins题解
题意翻译
给定一个半径为 的圆,圆心在 处。每次可以把圆固定在圆内的某点选择任意度数,使圆心移动到 处。求最小旋转次数。

思路
- 核心思路:两点之间线段最短。
- 圆每次旋转后的圆心都落在圆心与目标点的连线上,可以使得旋转次数最小。
- 圆每次旋转可移动 的距离,即直径。
- 计算出初始圆心与目标点的距离 ,---。
- 便是最少次数,此处使用向上取整是为了补全最后一次不足一个直径的距离。
代码解决
- c++
#include<bits/stdc++.h>
using namespace std;
double r,x_1,y_1,x_2,y_2;
int main()
{
cin>>r>>x_1>>y_1>>x_2>>y_2;
double dx=x_1-x_2,dy=y_1-y_2;
double d=sqrt(dx*dx+dy*dy);
cout<<ceil(d/(r*2));
return 0;
}
- pascal
program Minimum_Stops;
uses Math;
var
r, x_1, y_1, x_2, y_2: double;
dx, dy, d: double;
stops: integer;
begin
readln(r, x_1, y_1, x_2, y_2);
dx := x_1 - x_2;
dy := y_1 - y_2;
d := sqrt(dx * dx + dy * dy);
stops := Ceil(d / (r * 2));
writeln(stops);
end.

浙公网安备 33010602011771号