嗯...
题目链接:
这道题是一道不太明显,但很好二分的二分答案的一道题...
首先排序(二分要满足单调性),然后枚举每一个数,在[i + 1,n]区间中二分查找,如果有能和它匹配的数,直接输出即可...
AC代码:
1 #include2 #include 3 #include 4 5 using namespace std; 6 7 int a[100005]; 8 9 inline int er_fen(int l, int r, int x){10 while(l <= r){11 int mid = (l + r) >> 1;12 if(a[mid] == x) return 1;13 else if(a[mid] > x) r = mid - 1;14 else if(a[mid] < x) l = mid + 1;15 }16 return 0;17 }18 19 int main(){20 int n, m;21 scanf("%d", &n);22 for(int i = 1; i <= n; i++){23 scanf("%d", &a[i]);24 }25 sort(a + 1, a + n + 1);26 scanf("%d", &m);27 for(int i = 1; i <= n; i++){28 int t = m - a[i];29 if(er_fen(i + 1, n, t)) {printf("%d %d\n", a[i], t); return 0;}30 }31 printf("No\n");32 return 0;33 }