Submission #1147457

#TimeUsernameProblemLanguageResultExecution timeMemory
1147457ParsaGolestaniCookies (JOI23_cookies)C++20
13 / 100
150 ms1348 KiB
#include <bits/stdc++.h> using namespace std; const int N = 500; const int S = 15000; int n, m, a[N + 10], b[N + 10]; int dp[N + 10], par[N + 10]; pair<int, int> cnt[S + 10]; vector<int> vec[S + 10]; void readInput() { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; cin >> m; for (int i = 1; i <= m; i++) cin >> b[i]; } void calcDP() { dp[0] = 1; for (int i = 1; i <= m; i++) for (int j = b[i]; j <= n; j++) if (dp[j - b[i]] && (!dp[j] || dp[j - b[i]] + 1 < dp[j])) { dp[j] = dp[j - b[i]] + 1; par[j] = b[i]; } } void solveSub1() { if (dp[n] == 0) { cout << -1 << flush; return; } vector<int> vec; int pnt = n; while (pnt) { vec.push_back(par[pnt]); pnt -= par[pnt]; } int tmp = 1; cout << vec.size() << '\n'; for (auto x: vec) { cout << x << ' '; for (int i = 1; i <= x; i++) { cout << tmp << ' '; tmp++; } cout << '\n'; } } void solveSub2() { int sum = 0; for (int i = 1; i <= n; i++) sum += a[i]; if (sum % b[1]) { cout << -1 << flush; return; } int ans = sum / b[1]; for (int i = 1; i <= ans; i++) cnt[i] = {b[1], i}; for (int i = 1; i <= n; i++) { for (int j = ans; j >= 1; j--) if (a[i] && cnt[j].first) { a[i]--; cnt[j].first--; vec[cnt[j].second].push_back(i); } if (a[i]) { cout << -1 << flush; return; } sort(cnt + 1, cnt + ans + 1); } cout << ans << '\n'; for (int i = 1; i <= ans; i++) { cout << b[1] << ' '; for (auto x: vec[i]) cout << x << ' '; cout << '\n'; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); readInput(); if (*max_element(a + 1, a + n + 1) == 1) { calcDP(); solveSub1(); } else if (m == 1) solveSub2(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...