#include<stdio.h> #include <stdlib.h> #include <time.h> void QuickSort(int R[],int low,int high); int x; int top,start; int main(){ int t; scanf("%d",&t); while(t){ int n,flag=0,temp; scanf("%d %d",&n,&x); int arr[n]; top = n-1; for(int i=0;i<n;i++){ scanf("%d",&arr[i]); } QuickSort(arr,0,n-1); int i=0; int j=top; while(i<j){ if(arr[i]>x||arr[j]*2<x)break; if(arr[i]+arr[j]==x){flag=1;break;} else if(arr[i]+arr[j]>x){ j--; }else if(arr[i]+arr[j]<x){ i++; } } flag==1?printf("YES\n"):printf("NO\n"); t--; } } void QuickSort(int R[],int low,int high) { int i,j,temp; i=low; j=high; if(low<high) { srand((unsigned int)time(0));//初始化种子为随机值 int s = rand()%(high-low)+low; temp=R[s]; //设置枢轴 R[s]=R[i]; R[i]=temp; while(i!=j) { while(j>i&&R[j]>=temp) { --j; } if(i<j) { R[i]=R[j]; ++i; } while(i<j&&R[i]<temp) { ++i; } if(i<j) { R[j]=R[i]; --j; } } R[i]=temp; if(temp<=x){ QuickSort(R,low,i-1); QuickSort(R,i+1,high); } if(temp>x){ top = i; QuickSort(R,low,i-1); } } } |
Double click to view unformatted code.