View Code of Problem 3686

#include <stdio.h>
#include <stdlib.h>
int compare(const void*a,const void*b){
	return *(int*)a-*(int*)b;
}
int main()
{
	int t;
	scanf("%d",&t);
	int i;
	for(i = 1;i <= t;i ++){
		int n,x;
		scanf("%d %d",&n,&x);
		int j,a[n];
		for(j = 0;j < n;j ++){
			scanf("%d",&a[j]);
		}
		qsort(a,n,sizeof(int),compare);
		int k,t,flag = 0;
		k = 0;
		t = n-1;
		while(k < t){
			if(a[k]+a[t] == x){
				flag = 1;
				break;
			}
			if(a[k]+a[t] > x){
				t--;
			}
			if(a[k]+a[t] < x){
				k++;
			}
		}
		if(flag == 1){
			printf("YES\n");
		}
		else{
			printf("NO\n");
		}
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 3686