【51Nod】1001 数组中和等于K的数对
2017-04-27 16:34
260 查看
题意
给出一个整数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)。解题思路
先将A进行排序,我们对A中的每个元素查找对应的数对时,可以采用二分查找,因为是顺序排列了。剪枝:当A中的元素值的两倍大于等于K时,不用继续查找了。
参考代码
#include <iostream> #include <algorithm> using namespace std; #define MAXN 50000+5 int a[MAXN]; int k,n; int bs(int x){ //二分查找 int l=0,r=n-1; while (l<=r){ int mid=(l+r)/2; if (x<a[mid]) r=mid-1; if (x==a[mid]) return mid; if (x>a[mid]) l=mid+1; } return -1; } int main(){ while (cin>>k>>n){ for (int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); int cnt=0; for (int i=0;i<n;i++){ if (2*a[i]>=k) break; //剪枝 int tmp=bs(k-a[i]); if (tmp!=-1){ cout<<a[i]<<" "<<k-a[i]<<endl; cnt++; } } if (cnt==0) c 4000 out<<"No Solution"<<endl; } return 0; }
相关文章推荐
- [51NOD] 1001 数组中和等于K的数对 [二分]
- 【51nod】-1001 数组中和等于K的数对(思维)
- 51nod --1001 数组中和等于K的数对(一级算法题)
- 51nod_1001 数组中和等于K的数对(二分)
- 51Nod 1001 数组中和等于K的数对 (二分)
- 51Nod-1001 数组中和等于K的数对【排序+二分查找】
- 1001 数组中和等于K的数对——51NOD
- 51nod 1001 数组中和等于K的数对(二分)
- 51Nod 1001 数组中和等于K的数对 And 1015 水仙花数
- 51nod-【1001 数组中和等于K的数对】
- 51Nod 1001 数组中和等于K的数对 And 1015 水仙花数
- 51nod 1001 数组中和等于K的数对 (奇技淫巧
- 51nod 1001 数组中和等于K的数对【二分】
- 51nod 1001 数组中和等于K的数对(二分)
- 51Nod 1001 数组中和等于K的数对
- 51nod 1001 数组中和等于K的数对(尺取法)
- 1001 数组中和等于K的数对 1090 3个数和为0
- 51nod 1001 数组中和等于K的数对
- 51nod 1001 数组中和等于K的数对
- 51Nod 1001 数组中和等于K的数对