제출 #587511

#제출 시각아이디문제언어결과실행 시간메모리
587511KoDGift (IZhO18_nicegift)C++17
100 / 100
577 ms69784 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'; for (int i = 0; i < Q; ++i) { std::cout << split[i + 1] - split[i]; for (int j = 0; j < K; ++j) { std::cout << ' ' << std::lower_bound(list[j].begin(), list[j].end(), pair(split[i] + 1, 0))->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...