https://codeforces.com/contest/1474/problem/C
思路:第一次的x一定是数组的最大值和某个数的组合,通过枚举找到一个可行的方法即可。
int main() { int t; cin>>t; while(t--) { int n,i,j,k; cin>>n; vector<int> a(2*n); for(i=0;i<2*n;i++) cin>>a[i]; sort(a.begin(),a.end()); for(i=0;i<2*n-1;i++) { int x=a[i]+a[2*n-1]; vector<int>ans; multiset<int>ms; for(auto i:a) ms.insert(i); for(j=0;j<n;j++) { auto it=ms.end(); it--; int val=*it; int val1=x - *it; ms.erase(it); auto it1=ms.find(val1); if(it1==ms.end()) break; ans.push_back(val); ans.push_back(val1); x=max(val,val1); ms.erase(it1); } if(j==n) { cout<<"YES"<<endl; cout<<a[2*n-1]+a[i]<<"\n"; for(j=0;j<n;j++) cout<<ans[2*j]<<" "<<ans[2*j+1]<<"\n"; break; } } if(i==2*n-1) cout<<"NO"<<"\n"; } return 0; }