二分+sort
对于一个x 只需查找 数组中是否存在 k-x就可以确定
#include<bits/stdc++.h> using namespace std; int s[50010]; int b_s(int l,int r,int t) { int ans = 0; while (l <= r) { int mid = (l+r)/2; if(s[mid] >= t) ans = mid,r=mid-1; else l=mid+1; } if(s[ans] == t) return ans; return -1; } int main () { int k,n; scanf("%d %d",&k,&n); for(int i=0;i<n;i++) scanf("%d",&s[i]); sort(s,s+n); int cnt = 0; for(int i=0;i<n;i++) { int t= k-s[i]; int ans = b_s(i+1,n,t); if(ans == -1) continue; cnt++; printf("%d %d ",s[i],s[ans]); } if(cnt ==0) printf("No Solution "); }