1.题目描述:点击打开链接
2.解题思路:本题的解法颇为巧妙,应用了逆向思维。假设最后这n+m个雕塑已经摆放好,不妨将它们两两之间的距离看做单位1,那么计算之前的位置坐标。这里都以其中一个为圆周上的坐标原点。那么原来的雕塑中第i个的距离是pos=i/n*(n+m),因此看它离哪个整数比较接近,就移动到那个整数。而选择距离最近的那个整数只用把i/n*(n+m)四舍五入即可,即floor(pos+0.5),这就是本题解法的巧妙之处!这样,累加所有的最短移动距离之后,再扩大10000倍,就是最终的答案。
3.代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<functional>
using namespace std;