题目描述:
-
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
-
输入:
-
每个测试案例包括两行:第一行包含一个整数n和k,n表示数组中的元素个数,k表示两数之和。其中1 <= n <= 10^6,k为int第二行包含n个整数,每个数组均为int类型。
-
输出:
-
对应每个测试案例,输出两个数,小的先输出。如果找不到,则输出“-1 -1”
-
样例输入:
-
6 15 1 2 4 7 11 15
-
样例输出:
-
4 11
需要再看看july的相关博文。
#include <cstdio>
#include <cstdlib>
using namespace std;
int array[1000000];
void binsearch(int *array, int value, int n)
{
int low = 0, high = n-1;
while (low < high) {
if (value < array[low] + array[high])
high--;
else if (value > array[low] + array[high])
low++;
else {
printf("%d %d\n", array[low], array[high]);
return;
}
}
printf("-1 -1\n");
}
int main() {
int n, k, i;
while (scanf("%d %d", &n, &k) != EOF) {
for (i = 0; i < n; i++) {
scanf("%d", &array[i]);
}
binsearch(array, k, n);
}
return 0;
}