Submission #587512

#TimeUsernameProblemLanguageResultExecution timeMemory
587512KoDGift (IZhO18_nicegift)C++17
100 / 100
520 ms61148 KiB
#include <bits/stdc++.h> using ll = long long; using std::vector; using std::array; using std::pair; using std::tuple; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int N, K; std::cin >> N >> K; vector<ll> A(N); for (auto& x : A) { std::cin >> x; } const ll sum = std::accumulate(A.begin(), A.end(), 0ll); const ll max = *std::max_element(A.begin(), A.end()); const ll turn = sum / K; if (sum % K != 0 or max > turn) { std::cout << "-1\n"; return 0; } ll cur = 0; vector<vector<pair<ll, int>>> list = {{}}; vector<ll> split = {0, turn}; split.reserve(N + 2); for (int i = 0; i < N; ++i) { cur += A[i]; if (cur >= turn) { cur -= turn; list.back().emplace_back(turn, i); list.emplace_back(); } list.back().emplace_back(cur, i); split.push_back(cur); } std::sort(split.begin(), split.end()); split.erase(std::unique(split.begin(), split.end()), split.end()); const int Q = (int)split.size() - 1; std::cout << Q << '\n'; vector<int> idx(K); for (int i = 0; i < Q; ++i) { std::cout << split[i + 1] - split[i]; for (int j = 0; j < K; ++j) { while (list[j][idx[j]].first <= split[i]) { idx[j] += 1; } std::cout << ' ' << list[j][idx[j]].second + 1; } std::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...