4 条题解
-
6
解析
想要和所有住户最近,显然店应该在第(n+1)/2个住户的家里。
题解
#include <iostream> #include <algorithm> using namespace std; int main() { int a[100005]; int n; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; sort(a + 1, a + n + 1); int pos = (n + 1) / 2; int ans = 0; for (int i = 1; i <= n; i++) { ans += abs(a[i] - a[pos]); } cout << ans; return 0; }
-
3
-
3
思路:
通过研究输入样例和输出样例,我们可以得知,想要距离总和最短,位置一定要在n / 2上(如果你的下标从0开始用的话店铺位置对应的下标是n / 2,如果从1开始用就是(n + 1) / 2)
知道这些以后,计算其它位置到店铺的位置并求和,然后输出
#include <iostream> #include <algorithm> #include <cmath> using namespace std; int main() { int n,a[100005] = {0}; cin >> n; for(int i = 0;i < n;i++) cin >> a[i]; sort(a,a + n); int sum = 0,index = n / 2; for(int i = 0; i < n / 2;i++) sum += abs(a[i] - a[index]) + abs(a[n - i - 1] - a[index]); //因为计算结果有可能是负数,所以要用abs()转成正数 cout << sum; return 0; }
- 1
信息
- ID
- 326
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 1605
- 已通过
- 390
- 上传者