4 条题解

  • 6
    @ 2023-7-23 12:32:35

    解析

    想要和所有住户最近,显然店应该在第(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
      @ 2023-7-24 21:51:30
      #include <iostream>
      #include <algorithm>
      #include <cmath>
      // #include <bits/stdc++.h> 懒人专用
      int main(){
          int shop,q,sum=0,a[100000];std::cin>>q;
          for(int i=0;i<q;i++) std::cin>>a[i];
          std::sort(a,a+q);shop=a[q/2];
          for(int i=0;i<q;i++) sum+=abs(shop-a[i]);
          std::cout<<sum;return 0;}
      
      • 3
        @ 2023-7-23 16:41:30

        思路:

        通过研究输入样例和输出样例,我们可以得知,想要距离总和最短,位置一定要在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;
        }
        
        • 2
          @ 2023-8-6 11:57:02
          #include<bits/stdc++.h>
          using namespace std;
          int main()
          {
              int a[100005], n, sum;
              cin >> n;
              for(int i = 1; i <= n; i++) cin >> a[i];
              sort(a+1, a+1+n);
              for(int i = 1; i <= n; i++) sum += abs(a[i] - a[(n+1)/2]);
              cout << sum << endl;
              return 0;
          }
          
          • 1

          信息

          ID
          326
          时间
          1000ms
          内存
          256MiB
          难度
          7
          标签
          递交数
          1605
          已通过
          390
          上传者