中级农民
- 积分
- 100
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2021-2-28
- 最后登录
- 1970-1-1
|
楼主,第4题用binary search,
- int helper(vector<int> &A, vector<int> &B, int low, int up)
- {
- int n = A.size();
- for (int i = 0; i < n; i++)
- A[i] = A[i] * A[i];
- sort(A.begin(), A.end());
- int ans = 0;
- for (int num : B) {
- int key = low - num*num;
- if (key < 0) continue;
- auto i = lower_bound(A.begin(), A.end(), key);
- key = up - num * num;
- auto j = upper_bound(A.begin(), A.end(), key);
- ans += j - i;
- }
- return ans;
- }
- int solve(vector<int> &A, vector<int> &B, int low, int up)
- {
- if (A.size() >= B.size())
- return helper(A, B, low, up);
- else
- return helper(B, A, low, up);
- }
- int main()
- {
- vector<int> A = {2, 3};
- vector<int> B = {3, 4};
- int lower = 10, upper = 18;
- cout << solve(A, B, lower, upper) << endl;
- return 0;
- }
复制代码 [/i][/i][/i] |
|