2 条题解

  • 0
    @ 2024-11-12 10:19:59

    方法2,满分代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<string>
    #define INF 999999999
    #define N 1000001
    #define MOD 1000000007
    #define E 1e-5
    using namespace std;
    int a[N];
    int main()
    {
        int n,m;
        int x;
        int left,right,mid;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        cin>>m;
        while(m--)
        {
            cin>>x;
            left=1;
            right=n;
     
            while(left<right-1)
            {
                mid=(left+right)/2;
                if(a[mid]>x)
                    right=mid;
                else
                    left=mid;
            }
            if(fabs(a[left]-x)<=fabs(a[right]-x))
                cout<<a[left]<<endl;
            else
                cout<<a[right]<<endl;
        }
        return 0;
    }
    
    
    • 0
      @ 2024-11-11 15:26:48

      方法一:

      #include <bits/stdc++.h>
      using namespace std;
      
      int bsearch_v2(int a[], int n, int key) {
          int left = 0, right = n - 1;
          while (left + 1 < right) {
              int mid = (left + right) / 2;
              if (a[mid] < key)
                  left = mid;
              else
                  right = mid;
          }
          if (a[left] >= key) return left;
          if (a[right] >= key) return right;
          return n;
      }
      
      int main() {
          int n, m;
          cin >> n;
          int a[n];
          for (int i = 0; i < n; i++) {
              cin >> a[i];
          }
          sort(a, a+n);
          cin >> m;
          while (m--) {
              int key;
              cin >> key;
              int ret = bsearch_v2(a, n, key);
              if(ret == n) cout << a[n-1] << endl;
              else if(a[ret] == key) {
                  cout << a[ret] << endl;
              } else {
                  if(ret == 0) cout << a[0] << endl;
                  else if(abs(a[ret-1] - key) <= abs(a[ret] - key))
                      cout << a[ret-1] << endl;
                  else cout << a[ret] << endl;
              }
          }
          return 0;
      }
      
      
      • 1

      信息

      ID
      719
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      2
      已通过
      1
      上传者