View Code of Problem 133

#include<bits/stdc++.h>
using namespace std;
int main(){
	
	/*小的数,都比两数之和都大,肯定是NO
	或者大的数 的两倍都比X小 */
	int n;
	cin>>n;
	for(int i = 0;i<n;i++){
		int x,y;
		cin>>x>>y;
		int num[x] = { };
		for(int i = 0;i<x;i++)cin>>num[i];
		sort(num,num+x);
		int a = 0,b = x-1,f = 0;
		while(a<b){
			if(num[a] > y || num[b] * 2 < y){
				break;
			}
			if(num[a] + num[b] < y)a++;
			else if(num[a] + num[b] > y)b--;
			else {
				f = 1;
				break;
			}
		}
		if(f==0)cout<<"NO"<<endl;
		else cout<<"YES"<<endl;
		
	} 
	return 0;
} 

Double click to view unformatted code.


Back to problem 133