View Code of Problem 133

#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.


Back to problem 133