UVa3708 Graveyard (坐标缩放)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa3708 Graveyard (坐标缩放)相关的知识,希望对你有一定的参考价值。

链接:http://acm.hust.edu.cn/vjudge/problem/15133
分析:太妙了,首先把圆的周长看作1,均匀分布着n个点,然后加入m个点后总共就有(n+m)个点,那么我们把圆的周长放大到(n+m),这么做有什么好处呢?就是(n+m)个雕塑的坐标全是整数点了,相应的原来在周长为1下的n个点的坐标从i/n方法(n+m)倍,由于要移动的雕塑位置为整数所以我们可以用四舍五入来找最近的整数点(目标雕塑位置),然后再把边长缩小回1,就是在边长为1的情况下n个雕塑移动到最近目标雕塑位置的距离,把n-1个点(第0个点不移动)要移动的距离累加然后把这个距离和等比例扩大10000。

 1 #include <cstdio>
 2 #include <cmath>
 3 using namespace std;
 4 
 5 int main() {
 6     int n, m;
 7     while (scanf("%d%d", &n, &m) == 2) {
 8         double ans = 0.0;
 9         for (int i = 1; i < n; i++) {
10             double pos = (double)i * (n + m) / n;
11             ans += fabs(pos - floor(pos + 0.5)) / (n + m);
12         }
13         printf("%.4lf\n", ans * 10000);
14     }
15     return 0;
16 }

 

以上是关于UVa3708 Graveyard (坐标缩放)的主要内容,如果未能解决你的问题,请参考以下文章

UVAlive 3708 Graveyard(最优化问题)

LA 3708 && POJ 3154 Graveyard (思维)

uvalive 3708 Graveyard

题解 LA3708 Graveyard

UVA 1388 Graveyard

LA 3708 墓地雕塑(模拟)