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;
}


京公网安备 11010502036488号