51nod 1001 数组中和等于K的数对(二分)
题解: 用sort排下序,然后每个用二分找到的符合的下标j,判断此下标对应的值是不是你要找的。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <queue>
#include <stack>
#include <vector>
using namespace std;
#define INF 0x3f3f3f
#define pi acos(-1.0)
#define MAX 1000010
#define N 50010
int a[N];
int bsearch_zou(int begin,int end, int e)
{
int mid,left = begin, right = end;
while(left <= right)
{
mid = (left + right) >> 1;
if(a[mid] >= e)
right = mid-1;
else
left = mid+1;
}
return left;
}
int main()
{
int k,n;
while(~scanf("%d%d",&k,&n))
{
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
sort(a,a+n);
int ans = 0;
int flag = 0;
for(int i = 0; i < n; i++)
{
int x = k - a[i];
int l = bsearch_zou(i+1, n-1, x);
if(a[l] == x)
{
flag = 1;
printf("%d %d\n",a[i],x);
}
}
if(flag == 0)
printf("No Solution\n");
}
return 0;
}