View Code of Problem 133

#include<stdio.h>
void QuickSort(int R[],int low,int high);
int main(){
	int t;
	scanf("%d",&t);
	while(t){
		int n,x,flag=0,temp;
		scanf("%d %d",&n,&x);
		int arr[n];
		for(int i=0;i<n;i++){
			scanf("%d",&arr[i]);
		}
		int j=0;
		for(int i=1;i<n;i++)
			if(arr[i]<arr[i-1]){
			temp=arr[i];
				for(j=i-1;arr[j]>temp&&j>=0;j--) arr[j+1]=arr[j];
				arr[j+1]=temp;
		}

		int i=0;
		j=n-1;
		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)
    {
        temp=R[low];    //设置枢轴
        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;
        QuickSort(R,low,i-1);
        QuickSort(R,i+1,high);
    }
}

Double click to view unformatted code.


Back to problem 133