//既然要查找 用二分(归并)+排序 左右靠拢 #include<iostream> #include<algorithm> using namespace std; const int manx=100010; int arr[manx]; int flag=0; int main() { int i=0,j=0; int a=0; cin>>a; while(a--) { flag=0; int n,m; cin>>n>>m; for(i=0;i<n;i++) { cin>>arr[i]; } i=0,j=n-1; sort(arr,arr+n); while(i<j) { if(arr[i]+arr[j]==m) { flag=1; break; } else if(arr[i]+arr[j]>m) { j--;//试着变小 } else { i++; } } if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; } |
Double click to view unformatted code.