제출 #1133527

#제출 시각아이디문제언어결과실행 시간메모리
1133527stdfloatGift (IZhO18_nicegift)C++20
100 / 100
361 ms104840 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define sz(v) (int)(v).size() #define all(v) (v).begin(), (v).end() #define ff first #define ss second #define pli pair<ll, int> int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector<ll> a(n); for (auto &i : a) cin >> i; ll sm = accumulate(all(a), 0LL); if (sm % k || *max_element(all(a)) > sm / k) return cout << -1, 0; vector<ll> u = {0}; vector<deque<pli>> v = {{}}; for (int i = 0; i < n; i++) { if (a[i] <= sm / k - u.back()) { u.back() += a[i]; v.back().push_back({a[i], i}); } else { if (sm / k != u.back()) v.back().push_back({sm / k - u.back(), i}); v.push_back({{a[i] - sm / k + u.back(), i}}); u.push_back(a[i] - sm / k + u.back()); } } vector<vector<ll>> ans; while (!v[0].empty()) { ll mn = LLONG_MAX; for (int i = 0; i < k; i++) mn = min(mn, v[i].front().ff); ans.push_back({mn}); for (int i = 0; i < k; i++) { ans.back().push_back(v[i].front().ss + 1); v[i].front().ff -= mn; if (!v[i].front().ff) v[i].pop_front(); } } cout << sz(ans) << '\n'; for (auto i : ans) { for (auto 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...