Submission #378640

#TimeUsernameProblemLanguageResultExecution timeMemory
378640syl123456Gift (IZhO18_nicegift)C++17
30 / 100
2085 ms344060 KiB
#include <bits/stdc++.h> #define all(i) i.begin(), i.end() #define rall(i) i.rbegin(), i.rend() using namespace std; typedef long long ll; typedef pair<int, int> pi; typedef pair<ll, int> pl; int main() { ios::sync_with_stdio(0), cin.tie(0); int n, k; cin >> n >> k; ll a[n], sum = 0, mx = 0; priority_queue<pl> pq; for (int i = 0; i < n; ++i) cin >> a[i], sum += a[i], mx = max(mx, a[i]), pq.emplace(a[i], i); if (sum % k != 0 || mx > sum / k) return cout << -1, 0; vector<int> v; vector<vector<int>> ans; while (sum > 0) { for (int i = 0; i < k; ++i) v.push_back(pq.top().second), pq.pop(); if (a[v.back()] == sum / k) { ans.emplace_back(1, sum / k); for (int i : v) ans.back().push_back(i + 1); break; } ll x = max(1ll, a[v.back()] - pq.top().first); ans.emplace_back(1, x); while (!v.empty()) { int i = v.back(); v.pop_back(); ans.back().push_back(i + 1); a[i] -= x, sum -= x; pq.emplace(a[i], i); } } cout << ans.size() << '\n'; for (auto i : ans) { for (int j : i) cout << j << ' '; cout << '\n'; } } /* * sum % k == 0 && max <= sum / k * always sort 321 * every time [0,k), x = max(h[k] - h[k-1], 1) */
#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...