题意:
周长为10000的圆,等距分布n个点,加入m个点后,求要使n+m等分布,所要移动的最小距离。
思路:
等比缩放,将圆缩小为周长为n+m的圆
代码:
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main(){
int n, m;
while (~scanf("%d%d", &n, &m) ) {
int i;
double t, ans = 0;
for (i = 1; i <= n; i++)
{
t = (double)i / n*(n + m);//要移动的雕塑的坐标
//*(m+n)为下面方便通分
ans += fabs(t - floor(t + 0.5)) / (n + m);//累计移动距离
//四舍五入有bug
}
printf("%.4lf\n", ans * 10000);
}
return 0;
}

本文介绍了一种算法,用于计算在保持圆周长不变的情况下,将现有等距分布的点数量增加到指定数量时,所需移动的最小距离。通过等比缩放的方法,将原始圆缩小到目标圆大小,以此来求解移动距离。
2万+

被折叠的 条评论
为什么被折叠?



