제출 #1147445

#제출 시각아이디문제언어결과실행 시간메모리
1147445Hamed_GhaffariCookies (JOI23_cookies)C++20
13 / 100
3 ms1156 KiB
#include<bits/stdc++.h> using namespace std; using pii = pair<int, int>; #define X first #define Y second #define SZ(x) int(x.size()) #define pb push_back const int MXN = 503; const int inf = 1e9; int n, m, A[MXN], B[MXN], dis[MXN], par[MXN]; int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin >> n; assert(n<=500); for(int i=0; i<n; i++) cin >> A[i]; cin >> m; for(int i=0; i<m; i++) cin >> B[i]; if(m==1) { int b = B[0]; vector<vector<int>> ans; priority_queue<pii> pq; for(int i=0; i<n; i++) pq.push(pii(A[i],i)); while(SZ(pq)>=b) { vector<int> vec; for(int i=0; i<b; i++) { vec.pb(pq.top().Y); pq.pop(); } ans.pb(vec); for(int i : vec) if(A[i]>1) pq.push(pii(--A[i], i)); } if(!pq.empty()) { cout << "-1\n"; return 0; } cout << SZ(ans) << '\n'; for(auto i : ans) { cout << SZ(i) << ' '; for(auto j : i) cout << j+1 << ' '; cout << '\n'; } } else if(*max_element(A, A+n)==1) { for(int i=1; i<=n; i++) dis[i] = inf; queue<int> q; q.push(0); while(SZ(q)) { int v = q.front(); q.pop(); for(int i=0; i<m; i++) if(v+B[i]<=n && dis[v+B[i]]>dis[v]+1) { dis[v+B[i]] = dis[v]+1; par[v+B[i]] = v; q.push(v+B[i]); } } if(dis[n]==inf) { cout << "-1\n"; return 0; } cout << dis[n] << '\n'; int v=n; int ptr=1; while(v) { cout << v-par[v] << ' '; for(int i=0; i<v-par[v]; i++) cout << (ptr++) << ' '; cout << '\n'; v = par[v]; } } 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...