题解: 补充
(分类)
 
第1行: 第1行:
[[分类:贪心]]
+
[[分类:简单数学问题]]
 
==摘要==
 
==摘要==
 
{{信息题|Amr and Pins|http://acm.hust.edu.cn/vjudge/contest/view.action?cid{{=}}70536#problem/C|1|100|数据类型|7|time=2015-02-23 13:02:35}}
 
{{信息题|Amr and Pins|http://acm.hust.edu.cn/vjudge/contest/view.action?cid{{=}}70536#problem/C|1|100|数据类型|7|time=2015-02-23 13:02:35}}

2015年2月25日 (三) 20:10的最后版本

摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 失误原因(初次提交分数)
Amr and Pins ★☆☆☆☆ 答案正确 100 2015-02-23 13:02:35 数据类型(7)

题意

有一个半径为R,坐标在(x,y)的圆。每一步变换可以在圆周上点一个图钉,再将圆绕图钉旋转任意角度。问使得圆心到(x',y')的最小步数。

题解

  • 如图,沿着黄线走可以知道,一个点可以走到绿圆上的任意一点。无限细分,容易知道,任意一步可以到达2R内的任何一点。也就是每一步最多走2R,最少不走。容易得到:

507B.jpg

  • 目标点和当前点的距离为:D=\sqrt{(x-x')^1+(y-y')^2}
  • 最终需要步数为:step=ceil(\frac{D}{2R})(注:ceil是上取整)
  • 注意精度,要不直接double输入输出要不记得算的时候用long long

代码

507B.cpp代码已折叠
展开折叠内容
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
inline double/*fixed:不是int*/ sqr(const long long &x)
{
    return x*x;
}
int main()
{
    long long r,sx,sy,ex,ey;
    cin>>r>>sx>>sy>>ex>>ey;
    double dis=sqrt(sqr(ey-sy)+sqr(ex-sx));
    cout<<ceil(dis/r/2)<<endl;
    return 0;
}

著作权声明[编辑]

关于[编辑]