UVALive 3708 Graveyard
2014-12-15 19:27
344 查看
原题地址:
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15133
题意:周长为10000的圆上均匀分布着n个点,现在要加入m个点,这m个点的位置随意,问最少要移动原来n个点的距离和是多少。
思路:
①以一个前后不动的点(一定存在)为原点,此时,为移动距离最少情况。
②假设所有点已经就位,计算此时哪些旧点需要移动。
③需要移动的点,移动到离它最近的新点位置。(可证明不存在两个原来的点移动到同一点的情况)
代码如下:
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15133
题意:周长为10000的圆上均匀分布着n个点,现在要加入m个点,这m个点的位置随意,问最少要移动原来n个点的距离和是多少。
思路:
①以一个前后不动的点(一定存在)为原点,此时,为移动距离最少情况。
②假设所有点已经就位,计算此时哪些旧点需要移动。
③需要移动的点,移动到离它最近的新点位置。(可证明不存在两个原来的点移动到同一点的情况)
代码如下:
#include "stdio.h" #include "math.h" int main() { int n,m; double ans,l,s; while(~scanf("%d%d",&n,&m)) { m+=n; //将m化为总份数 ans=0; for(int i=1;i<n;i++) //对于以原点为0计数的第n个点 { s=(double)i/n*m; //在n份下的第i点(以n为总长下坐标为i)对应的在m份下的坐标 ans+=fabs(s-floor(s+0.5))/m; //计算移动距离。<span style="font-family: Arial, Helvetica, sans-serif;">floor(s+0.5)表示s四舍五入 对应的点,为原位置转到的新位置,除以m是为了将以m为总长转变为以单位1为总长,方便结果计算。 } printf("%.4lf\n",ans*10000); } return 0; }
相关文章推荐
- 指南第一章 例题4 UVALive 3708 Graveyard(参考系)
- Graveyard UVALive - 3708(思维)
- UVAlive3708 UVA1388 POJ3154 Graveyard【水题】
- uvalive 3708 Graveyard
- Graveyard UVALive - 3708(思维)
- 思维 UVALive 3708 Graveyard
- UVAlive 3708 Graveyard(最优化问题)
- UVALive 3708 Graveyard
- UVALive - 3708 Graveyard
- UVALive 3708_Graveyard
- 例题1.4 Graveyard UVALive - 3708 数学思维题
- UVA 3708 [Graveyard]
- UVA 3708 Graveyard(思维)
- uva 3708 - Graveyard
- uvalive 3708 墓地雕塑
- UVA-3708-Graveyard
- UVALive5346 UVA374 Big Mod【快速幂】
- UVALive - 3211 Now or later (【2-SAT】+【二分】)
- UVALive - 4254 Processor 二分+优先队列
- UVALive 7155 Keyboarding(BFS)