제출 #287947

#제출 시각아이디문제언어결과실행 시간메모리
287947BertedGift (IZhO18_nicegift)C++14
100 / 100
789 ms142200 KiB
#include <iostream> #include <list> #include <vector> #include <algorithm> #include <assert.h> #define ll long long #define vi vector<int> #define piv pair<ll, vector<int>> #define pii pair<ll, int> #define fst first #define snd second using namespace std; int N, K; ll S = 0; pii A[1000001]; list<piv> L; int main() { ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("A.in", "r", stdin); //freopen("A.out", "w", stdout); cin >> N >> K; for (int i = 0; i < N; i++) {cin >> A[i].fst; A[i].snd = i; S += A[i].fst;} if (S % K) {cout << "-1\n";} else { sort(A, A + N, greater<pii>()); S /= K; if (A[0].fst <= S) { L.push_back({S, vi()}); auto it = L.begin(); int iterated = 0; for (int i = 0; i < N; i++) { while (A[i].fst) { if (it -> fst > A[i].fst) { it -> fst -= A[i].fst; vector<int> cpy = it -> snd; cpy.push_back(A[i].snd + 1); L.insert(it, make_pair(A[i].fst, cpy)); A[i].fst = 0; } else { A[i].fst -= it -> fst; it -> snd.push_back(A[i].snd + 1); it = next(it); if (it == L.end()) {it = L.begin();} } iterated++; } } cout << L.size() << "\n"; for (const auto &x : L) { cout << x.fst; for (const auto &y : x.snd) {cout << " " << y;} cout << "\n"; } //cout << "Iteration Calls : " << iterated << "\n"; assert(iterated <= N * K); } else {cout << "-1\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...