제출 #378690

#제출 시각아이디문제언어결과실행 시간메모리
378690syl123456Gift (IZhO18_nicegift)C++17
0 / 100
261 ms48496 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; ll gcd(ll i, ll j) { if (j == 0) return i; return i % j ? gcd(j, i % j) : j; } ll lcm(ll i, ll j) { return i * j / gcd(i, j); } 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 = min((sum - k * pq.top().first) / k, (sum - k * a[v.back()]) / (k + 1)); assert(x > 0); //sum - ka[k] >= kx //sum - k(a[k-1]-x) >= kx 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'; } }
#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...