您的位置:首页 > 其它

51nod 1001 数组中和等于K的数对

2016-05-26 23:36 232 查看
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1001

题目:给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对。例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0,8),(2,6),(3,5)。

直接排序,然后对二分找k-a[I]即可。

#include <iostream>
#include<bits/stdc++.h>
#define LL long long
using namespace std;

int n,k;
LL a[55000];

int _find(LL x)
{
int l=0,r=n-1;
while(l<=r)
{
int mid=(r+l)>>1;
if(a[mid]==x) return 1;
if(a[mid]<x) l=mid+1;
else r=mid-1;
}
return 0;
}

int main()
{
scanf("%d%d",&k,&n);
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
sort(a,a+n);
int flag=0;
for(int i=0;i<n;i++)
{
if(a[i]>=k/2) break;
if(_find(k-a[i]))
{
flag=1;
cout<<a[i]<<" "<<k-a[i]<<endl;
}
}
if(!flag) cout<<"No Solution"<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: