View Code of Problem 133

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

Double click to view unformatted code.


Back to problem 133