题目:POJ2366 这道题就是要找出两个数组中是否有相加位10000的数,用到了alorithm库里面的sort函数,然后用二分查找binary_search。
#include"iostream"
#include"algorithm"
using namespace std;
bool binary_search(int k, int a[], int n) {
int begin = 0, end = n - 1;
int mid = 0;
while (end >= begin) {
mid = begin + ((end - begin) >> 1);
if (a[mid] > k) {
end = mid - 1;
}
else if (a[mid] < k) {
begin = mid + 1;
}
else {
return true;
}
}
return false;
}
int main() {
int a[50000+ 5];
int n, m, k, flag = 0;
cin >> n;
for (int i=0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n);
cin >> m;
for (int i = 0; i < m; i++) {
cin >> k;
if (binary_search(10000 - k, a, n)) {
flag = 1;
}
}
if (flag == 1)
cout << "YES";
else
cout << "NO";
return 0;
}
一开始把YES和NO加了“!”,结果过不了、、、、、、
还有a[50000+5]给的是[10000+5],结果报“Runtime Error”的错、、、、、、
这篇博客介绍了如何利用C++的sort函数和二分查找算法(binary_search)来解决POJ 2366题。题目要求在两个数组中寻找相加等于10000的数对。博客通过实例展示了如何对数组进行排序,然后应用二分查找技术来提高搜索效率。在实现过程中,博主遇到了输出错误和内存越界的问题,并分享了解决方法。

766

被折叠的 条评论
为什么被折叠?



