UVaLive 3708
题意:周长为10000的圆上等距分布n个雕塑,求再加入m个雕塑后,为使所有雕塑等距分布所需移动原来n个雕塑的最小总距离。
分析:计算相对距离。
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<string> 5 #include<cstdlib> 6 #include<cmath> 7 #include<sstream> 8 #include<algorithm> 9 #include<set> 10 #include<stack> 11 #include<list> 12 #include<map> 13 #include<queue> 14 #include<deque> 15 #include<vector> 16 #include<cctype> 17 using namespace std; 18 const int MAXN = 1000 + 10; 19 const int MAXT = 10000 + 10; 20 const int INF = 0x7f7f7f7f; 21 const double EPS = 1e-6; 22 const double PI = acos(-1.0); 23 typedef long long ll; 24 typedef unsigned long long llu; 25 int main() 26 { 27 int n, m; 28 while(scanf("%d%d", &n, &m) != EOF) 29 { 30 double ans = 0; 31 for(int i = 1; i < n; ++i) 32 { 33 double tmp = (double)i / n * (n + m);//所有待移动雕塑在n+m的等距分布里的坐标 34 ans += fabs(tmp - floor(tmp + 0.5)) / (n + m);//除以n+m,是使ans的结果是以总长度为1为基准,而不是n+m 35 } 36 printf("%.4lf\n", ans * 10000); 37 } 38 return 0; 39 }