嗯…
题目链接:http://noi.openjudge.cn/ch0111/07/
这道题是一道不太明显,但很好二分的二分答案的一道题…
首先排序(二分要满足单调性),然后枚举每一个数,在[i + 1,n]区间中二分查找,如果有能和它匹配的数,直接输出即可…
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; int a[]; inline int er_fen(int l, int r, int x){
while(l <= r){
int mid = (l + r) >> ;
if(a[mid] == x) return ;
else if(a[mid] > x) r = mid - ;
else if(a[mid] < x) l = mid + ;
}
return ;
} int main(){
int n, m;
scanf("%d", &n);
for(int i = ; i <= n; i++){
scanf("%d", &a[i]);
}
sort(a + , a + n + );
scanf("%d", &m);
for(int i = ; i <= n; i++){
int t = m - a[i];
if(er_fen(i + , n, t)) {printf("%d %d\n", a[i], t); return ;}
}
printf("No\n");
return ;
}
AC代码