Submission #544581

#TimeUsernameProblemLanguageResultExecution timeMemory
544581spike1236Gift (IZhO18_nicegift)C++14
100 / 100
647 ms133400 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define f first #define s second #define ll long long #define ld long double #define all(_v) _v.begin(), _v.end() #define sz(_v) (int)_v.size() #define pii pair <int, int> #define pll pair <ll, ll> #define veci vector <int> #define vecll vector <ll> const int dx[4] = {1, -1, 0, 0}; const int dy[4] = {0, 0, -1, 1}; const double PI = 3.1415926535897932384626433832795; const double eps = 1e-9; const int MOD1 = 1e9 + 7; const int MOD2 = 998244353; const int MAXN = 1e6 + 10; int n, k; ll a[MAXN]; vector <veci> ans; vecll vals; vector <vector <pll>> g; void solve() { cin >> n >> k; ll sum = 0; ll 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; return; } ll p = 0; vector <pll> cur; for(int i = 1; i <= n; ++i) { p += a[i]; if(p >= sum / k) { cur.pb(mp(a[i] - p + sum / k, i)); g.pb(cur); cur.clear(); p -= sum / k; if(p != 0) cur.pb(mp(p, i)); } else cur.pb(mp(a[i], i)); } if(!cur.empty()) g.pb(cur); while(1) { ll mn = 1e18; for(int i = 0; i < sz(g); ++i) mn = min(mn, g[i].back().f); vals.pb(mn); bool ok = 0; veci cr; for(int i = 0; i < sz(g); ++i) { cr.pb(g[i].back().s); if(g[i].back().f == mn) g[i].pop_back(); else g[i].back().f -= mn; if(g[i].empty()) ok = 1; } ans.pb(cr); if(ok) break; } cout << sz(ans) << '\n'; for(int i = 0; i < sz(ans); ++i) { cout << vals[i] << ' '; for(auto j : ans[i]) cout << j << ' '; cout << '\n'; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int CNT_TESTS = 1; ///cin >> CNT_TESTS; for(int NUMCASE = 1; NUMCASE <= CNT_TESTS; ++NUMCASE) { solve(); if(NUMCASE != CNT_TESTS) 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...