2 条题解
-
0
方法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
方法一:
#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
- 上传者