MathQ_

Untitled

Jun 16th, 2021
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. int n, k;
  2. vector<vector<int>> a;
  3.  
  4. bool check(vector<int> idx) {
  5.     for (int i = 0; i < k; ++i) {
  6.         int l = min(a[idx[0]][i], a[idx[1]][i]), r = max(a[idx[0]][i], a[idx[1]][i]);
  7.         for (int j = 2; j < n; j += 2) {
  8.             l = max(l, min(a[idx[j]][i], a[idx[j + 1]][i]));
  9.             r = min(r, max(a[idx[j]][i], a[idx[j + 1]][i]));
  10.         }
  11.         if (l > r) {
  12.             return false;
  13.         }
  14.     }
  15.     return true;
  16. }
  17.  
  18. int main() {
  19.     fast
  20.     // file_in
  21.     // file_in_out
  22.    
  23.     cin >> n >> k;
  24.     a.resize(n, vector<int>(k));
  25.     cin >> a;
  26.  
  27.     if (k == 1) {
  28.         vector<pii> b(n);
  29.         for (int i = 0; i < n; ++i) b[i] = {a[i][0], i + 1};
  30.         sort(all(b));
  31.         cout << "YES" << '\n';
  32.         for (int i = 0; i < n / 2; ++i) {
  33.             cout << b[i].se << " " << b[n - i - 1].se << '\n';
  34.         }
  35.         return 0;
  36.     }
  37.    
  38.     vector<int> idx(n);
  39.     iota(all(idx), 0);
  40.     do {
  41.         if (check(idx)) {
  42.             cout << "YES" << '\n';
  43.             for (int i = 0; i < n; i += 2) {
  44.                 cout << idx[i] + 1 << " " << idx[i + 1] + 1 << '\n';
  45.             }
  46.             return 0;
  47.         }
  48.     } while (next_permutation(all(idx)));
  49.     cout << "NO" << '\n';
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment