Submission #1147377

#TimeUsernameProblemLanguageResultExecution timeMemory
1147377ooscodeCookies (JOI23_cookies)C++20
0 / 100
1 ms836 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define F first #define S second #define all(x) x.begin() , x.end() #define pb push_back #define kid int tm = (tl + tr) >> 1 , cl = v << 1 , cr = cl | 1 const int N = 15e3 + 10; const int INF = 1e18 + 10; const int mod = 1e9 + 7; int n , m; int a[N]; int b[N]; int dp[N]; int par[N]; vector<int> ans[N]; void solve() { int s = 0; int mx = 0; cin >> n; for(int i = 1 ; i <= n ; i++) cin >> a[i] , s += a[i] , mx = max(mx , a[i]); cin >> m; for(int i = 1 ; i <= m ; i++) cin >> b[i]; for(int i = 1 ; i < N ; i++) dp[i] = -INF; for(int i = 1 ; i <= m ; i++) for(int j = b[i] ; j < N ; j++) if(dp[j] < dp[j-b[i]] + 1) dp[j] = dp[j - b[i]] + 1 , par[j] = b[i]; if(dp[s] < mx) {cout << "-1\n"; return;} multiset<pair<int , int>> t; int x = s; int o = 1; while(x) { t.insert({par[x] , o++}); x -= par[x]; } sort(a+1 , a+n+1); reverse(a+1 , a+n+1); for(int i = 1 ; i <= n ; i++) { if(t.size() < a[i]) {cout << "-1\n"; return;} auto p = --t.end(); vector<pair<int , int>> v; for(int j = 1 ; j <= a[i] ; j++) { v.pb(*p); ans[p->S].pb(i); t.erase(p); p = --t.end(); } for(auto x : v) t.insert({x.F-1 , x.S}); } cout << dp[s] << "\n"; for(int i = 1 ; i <= dp[s] ; i++) { cout << ans[i].size() << " "; for(auto x : ans[i]) cout << x << " "; cout << "\n"; } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n = 1; // cin >> n; while(n--) solve(); }
#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...