Submission #1133249

#TimeUsernameProblemLanguageResultExecution timeMemory
1133249JelalTkmGift (IZhO18_nicegift)C++20
18 / 100
140 ms22692 KiB
#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")

using namespace std;

#define int long long int

const int N = 3e5 + 10;
const int md = 1e9 + 7;
const int INF = 1e18;

int32_t main(int32_t argc, char *argv[]) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  
  int T = 1;
  // cin >> T;
  while (T--) {
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    map<int, int> mp;
    for (int i = 0; i < n; i++) {
      cin >> a[i];
      mp[a[i]]++;
    }

    if (k == 2 && (int) mp.size() != 1) {
      multiset<pair<int, int>> s;
      for (int i = 0; i < n; i++)
        s.insert({a[i], i + 1});
      bool ok = 0;
      vector<pair<int, pair<int, int>>> ans;
      while (true) {
        auto it = s.end(), it1 = s.end();
        it--, it--, it1--;
        if (!((*it).first) xor !((*it1).first))
          break;
        if (!((*it).first) && !((*it1).first)) {
          ok = 1;
          break;
        }
        auto pr = *it, pr1 = *it1;
        ans.push_back({1ll, {pr.second, pr1.second}});
        s.erase(it), s.erase(it1);
        s.insert({pr.first - 1ll, pr.second});
        s.insert({pr1.first - 1ll, pr1.second});
      }
      if (ok) {
        cout << (int) ans.size() << '\n';
        for (auto i : ans)
          cout << i.first << " " << i.second.first << " " << i.second.second << '\n';
      } else {
        cout << -1 << '\n';
      }
    } else if (mp.size() == 1) {
      if (n % k)
        cout << -1 << '\n';
      else {
        cout << (n / k) << '\n';
        for (int i = 0; i < n; i += k) {
          cout << a[i] << " ";
          for (int j = i; j < i + k; j++)
            cout << j + 1 << " ";
          cout << '\n';
        }
      }
    }
  }

  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...