RE
查看原帖
RE
637788
kimi0705楼主2023/7/20 08:31

CoDe

// Problem: C. Array Destruction
// Contest: Codeforces - Codeforces Round 696 (Div. 2)
// URL: https://codeforces.com/problemset/problem/1474/C
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// Author: Zhong Jiaxuan
// Luogu: 637788
// Email: zhongjiaxuankimi@qq.com
// Tips:
//   - INT_MAX = 2147483647
//   - INT_MIN = -2147483648
// Tag:
//
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define int long long
#define db double
using namespace std;
const int N = 2001;
int t, n, x;
int arr[N];
bool cmp(int i, int j) { return i > j; }
multiset<int> mul;
vector<int> ans1;
vector<int> ans2;
bool judge(int i) {
  ans1.clear();
  ans2.clear();
  mul.clear();
  for (int j = 2; j <= 2 * n; j++)
    if (j != i)
      mul.insert(arr[j]);
  ans1.push_back(arr[1]);
  ans2.push_back(arr[i]);
  x = arr[1];
  for (int i = 2; i <= n; i++) {
    int maxx = *mul.rbegin();
    if (x != maxx * 2 || mul.count(maxx) >= 2) {
      ans1.push_back(*mul.rbegin());
      ans2.push_back(x - *mul.rbegin());
      mul.erase(mul.find(x - *mul.rbegin()));
      x = *mul.rbegin();
      mul.erase(mul.find(x));
    } else {
      return false;
    }
  }
  return true;
}
signed main() {
  cin >> t;
  while (t--) {
    bool print = false;
    cin >> n;
    for (int i = 1; i <= n + n; i++)
      cin >> arr[i];
    sort(arr + 1, arr + n + n + 1, cmp);
    for (int i = 2; i <= 2 * n; i++) {
      if (judge(i)) {
        puts("YES");
        cout << arr[1] + arr[i] << '\n';
        for (int i = 0; i < n; i++)
          cout << ans1[i] << ' ' << ans2[i] << '\n';
        print = false;
        break;
      }
    }
    if (!print)
      puts("NO");
  }
}
2023/7/20 08:31
加载中...