3 条题解

  • 1
    @ 2023-6-27 10:47:35

    其实就是在找与每个学生的估分差最小的学校录取线的差值,设当前学生估分是 aa ,那么最小差值 == 第一个大于等于 aa 的数据a-aaa-第一个小于等于 aa 的数据的最小值。

    #include <bits/stdc++.h>
    using namespace std;
    int n,m,x,ans;
    int a[100001];
    int main(){
        cin>>n>>m;
        for (int i=1;i<=n;i++){
            cin>>a[i];
        }
        sort(a+1,a+n+1);
        while (m--){
            cin>>x;
            //特判两种特殊情况
            if (x>a[n]){
                ans+=x-a[n];
                continue;
            }
            if (x<a[1]){
                ans+=a[1]-x;
                continue;
            }
            int l=1,r=n;
            while (l<=r){
                int mid=(l+r)>>1;
                if (a[mid]>=x){
                    r=mid-1;
                }else{
                    l=mid+1;
                }
            }
            ans+=min(a[l]-x,x-a[l-1]);
        }
        cout<<ans;
        return 0;
    }
    
    • 1
      @ 2023-5-24 19:56:14

      “真”错的

      #include <bits/stdc++.h>
      using namespace std;
      int a[100005],b[100005];
      int main()
      {
          int m,n;
          cin >> n >> m;
          for(int i=1;i<=n;i++)
          {
              cin >> a[i];
          }
          for(int i=1;i<=m;i++)
          {
              cin >> b[i];
          }
          sort(a+1,a+1+n);
          int ans=0;
          for(int i=1;i<=m;i++)
          {
              int l=1,r=n+1;
              while(l<r)
              {
                  int mid=(l+r)/2;
                  if(a[mid]<=b[i])
                  {
                      l=mid+1;
                  }
                  else
                  {
                      r=mid;
                  }
              }
              if(b[i]<=a[1])
              {
                  ans+=a[1]-b[i];
              }
              else
              {
                  ans+=min(abs(a[l-1]-b[i]),abs(a[l]-b[i]));
              }
          }
          cout << ans;
      }
      
      • -1
        @ 2023-5-23 21:23:54

        错的别复制

        #include <bits/stdc++.h>
        using namespace std;
        int main()
        {
            int m,n,a[200000],b[200000],sum=0;
            cin >> m >> n;
            for(int i=1;i<=m+n;i++)
            {
                cin >> a[i];
                if(i<=m)
                {
                    b[i]=1;
                }
                else
                {
                    b[i]=0;
                }
            }
            for(int i=1;i<=m+n;i++)
            {
                for(int j=1;j<=m+n;j++)
                {
                    if(a[i]>a[j])
                    {
                        int c=a[i];
                        a[i]=a[j];
                        a[j]=c;
                        int d=b[i];
                        b[i]=b[j];
                        b[j]=d;
                    }
                }
            }
            for(int i=1;i<=m+n;i++)
            {
                if(i==1&&b[i]==0)
                {
                    continue;
                }
                if(b[i]==0)
                {
                    if(a[i]-a[i-1]>a[i+1]-a[i])
                    {
                        sum+=a[i+1]-a[i];
                    }
                    else
                    {
                        sum+=a[i]-a[i-1];
                    }
                }
            }
            cout << sum;
        }
        
        • @ 2023-6-27 10:32:39

          错的还发出来干啥

      • 1

      信息

      ID
      895
      时间
      1000ms
      内存
      128MiB
      难度
      4
      标签
      递交数
      60
      已通过
      28
      上传者