Submission #1314687

#TimeUsernameProblemLanguageResultExecution timeMemory
1314687Sam_a17Gift (IZhO18_nicegift)C++20
100 / 100
345 ms90240 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 10; int n, k; long long a[N]; int comp_num; deque<pair<long long, int>> components[N / 1000]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> k; long long sum = 0, mx = 0; for (int i = 1; i <= n; i++) { cin >> a[i]; sum += a[i]; mx = max(mx, a[i]); } if (sum % k != 0 || mx > (sum / k)) { cout << -1 << '\n'; return 0; } long long needSum = sum / k; long long blockSum = 0; for (int i = 1; i <= n; i++) { if (blockSum + a[i] <= needSum) { blockSum += a[i]; components[comp_num].push_back(make_pair(a[i], i)); } else { components[comp_num].push_back(make_pair(needSum - blockSum, i)); a[i] -= needSum - blockSum; blockSum = needSum; i--; } if (blockSum == needSum) { comp_num++; blockSum = 0; } } vector<vector<long long>> ans; while (sum) { long long min_sum = INT64_MAX; for (int i = 0; i < comp_num; ++i) { assert(components[i].size()); min_sum = min(min_sum, components[i].front().first); } vector<long long> seq; seq.push_back(min_sum); for (int i = 0; i < comp_num; ++i) { assert(components[i].size()); seq.push_back(components[i].front().second); components[i].front().first -= min_sum; if (!components[i].front().first) { components[i].pop_front(); } } sum -= min_sum * comp_num; ans.push_back(seq); } cout << ans.size() << '\n'; for (auto& i : ans) { for (auto j : i) { cout << j << " "; } 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...