Description
有一个非递减的整数序列a1,a2…..an-1,an,给定一个整数x,问在序列中是否存在两个数的和为x,如果存在,输出”YES”,否则输出”NO”。
Input
输入有多组数据,每一组数据第一行有两个整数n和x,(n和x均小于100000),分别表示整数序列的元素个数及两数和x,第二行有n个整数,分别表示a1到an的值,每两个数之间用空格隔开。1≤a1≤a2≤……. ≤an-1≤an<2^31。输入以0 0结束。
Output
对于每一组数据,输出为一行,为YES或NO。
Sample Input
5 10
1 2 3 4 5
6 12
1 3 5 7 9 110 0
Sample Output
NO
YES
#include<iostream>
using namespace std;
void judge(int n,unsigned int x, unsigned int a[])
{
int Begin, End;
Begin = 0;
End = n-1;
while (Begin<End)
{
if (a[Begin] + a[End] > x) End--;
else if (a[Begin] + a[End] < x) Begin++;
else if (a[Begin] + a[End] == x)
{
cout << "YES" << endl;
return;
}
}
cout << "NO" << endl;
return;
}
int main()
{
int n;
unsigned int x;
while (cin >> n >> x)
{
if (n == 0 && x == 0)break;
unsigned int *a = new unsigned int[n];
for (int i = 0; i < n; i++) cin >> a[i];
judge(n, x, a);
delete[]a;
}
}