6 条题解
-
10
-
5
题目描述
在一条直线道路上有多个住户,现在想在这条直线道路上开一家超市,超市可以开在任何位置,包括住户所在的位置。现在请你编程求解,超市开在哪里,可以使所有住户到商店的距离的总和是最小的。
看完感受:把超市开在住户家里,也太
邪恶人性化了。言归正传,题目背景摆明了本题考查贪心思想
证明贪心策略比较简单,在升序排列中第 (n+1)>>1 项。
距离公式为 |a-b| (求a,b两地间的距离)
代码如下:
#include <iostream> #include <algorithm> using namespace std; int a[100005],n,sum; int main() { cin >> n; for(int i=1;i<=n;i++) { cin >> a[i]; } sort(a+1,a+n+1); int x=a[(n+1)>>1]; for (int i=1;i<=n;i++) { sum+=abs(x-a[i]);//这里就是上文提到的距离公式 } cout << sum; return 0; }
-
-2
</span>#include <bits/stdc++.h> using namespace std; int a[100001];//注意了 int main(){ int n,mid=0,ans=0; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); if(n%2==0){ mid=a[n/2];//详情请看梓璇 }else{ mid=a[(n+1)/2]; } for(int i=1;i<=n;i++){ ans+=abs(mid-a[i]);//学过初一上学期的绝对值的人都知道 }cout<<ans; return 0; }//不对出来打我
- 1
信息
- ID
- 1231
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 932
- 已通过
- 270
- 上传者