Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int n, k;
- vector<vector<int>> a;
- bool check(vector<int> idx) {
- for (int i = 0; i < k; ++i) {
- int l = min(a[idx[0]][i], a[idx[1]][i]), r = max(a[idx[0]][i], a[idx[1]][i]);
- for (int j = 2; j < n; j += 2) {
- l = max(l, min(a[idx[j]][i], a[idx[j + 1]][i]));
- r = min(r, max(a[idx[j]][i], a[idx[j + 1]][i]));
- }
- if (l > r) {
- return false;
- }
- }
- return true;
- }
- int main() {
- fast
- // file_in
- // file_in_out
- cin >> n >> k;
- a.resize(n, vector<int>(k));
- cin >> a;
- if (k == 1) {
- vector<pii> b(n);
- for (int i = 0; i < n; ++i) b[i] = {a[i][0], i + 1};
- sort(all(b));
- cout << "YES" << '\n';
- for (int i = 0; i < n / 2; ++i) {
- cout << b[i].se << " " << b[n - i - 1].se << '\n';
- }
- return 0;
- }
- vector<int> idx(n);
- iota(all(idx), 0);
- do {
- if (check(idx)) {
- cout << "YES" << '\n';
- for (int i = 0; i < n; i += 2) {
- cout << idx[i] + 1 << " " << idx[i + 1] + 1 << '\n';
- }
- return 0;
- }
- } while (next_permutation(all(idx)));
- cout << "NO" << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment