【题解-OpenJudge】和为给定数
题目:和为给定数
题目描述
输入
输出
时空限制
代码
#include<iostream>
#include<algorithm>using namespace std;const int Maxn = 100000 + 10;int n;
int a[Maxn];
int m;
int y;bool check(int mid){ // m - y 的结果return (m - y) == a[mid];
}int binarySearch(int l, int r){while(l < r){int mid = l + r >> 1;if(check(mid)){r = mid;}else{l = mid + 1;}}return a[l];
}int main(){scanf("%d", &n);for(int i=0;i<n;i++){scanf("%d", &a[i]);}scanf("%d", &m);sort(a, a+n);int res = 1e9;int flag = 0;for(int i=0;i<n;i++){y = a[i];int ans = binarySearch(i + 1, n - 1);if((y + ans) == m){res = min(res, min(y, ans));flag = 1;}}if(flag == 0){printf("No\n");}else{printf("%d %d\n", res, m - res);}return 0;
}
结果
WA