View Code of Problem 3686

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.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,flag=0,i,j;
        scanf("%d %d",&n,&x);
        int v[n];
        for(i=0;i<n;i++){
            scanf("%d",&v[i]);
        }
        qsort(v,n,sizeof(int),cmp);
        for(i=0,j=n-1;i<j;){
            if(v[i]+v[j]==x){
                flag=1;
                break;
            }else if(v[i]+v[j]<x){
                i++;
            }else if(v[i]+v[j]>x){
                j--;
            }
        }
        if(flag==1){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
    }
	return 0;
}

Double click to view unformatted code.


Back to problem 3686