제출 #1150704

#제출 시각아이디문제언어결과실행 시간메모리
1150704LudisseyA Difficult(y) Choice (BOI21_books)C++20
100 / 100
19 ms416 KiB
#include <bits/stdc++.h> #include "books.h" #define int long long #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() using namespace std; map<int,int> mp; int ski(int x){ if(mp.find(x)!=mp.end()) return mp[x]; return mp[x]=skim((int)(x+1)); } void solve(signed N, signed K, long long A, signed S) { vector<pair<int,int>> a; set<int> st; for (int i = 0; i < K; i++) { a.push_back({ski(i),i}); st.insert(i); } int l=K, r=N-1; while(l<r){ int mid=(l+r)/2; int v=ski(mid); if(v>=A) { r=mid; }else{ l=mid+1; } } int mxI=r; for (int i = mxI; i >= max(0LL, (mxI-K)); i--) { if(st.find(i)!=st.end()) continue; a.push_back({ski(i),i}); } sort(all(a)); vector<int> mask(K, 1); mask.resize(sz(a), 0); vector<signed> ans; do { int sum=0; for (int i = 0; i < sz(a); i++) { if (mask[i]) sum+=a[i].first; } if(sum>=A&&sum<=2*A){ for (int i = 0; i < sz(a); i++) { if (mask[i]) ans.push_back(a[i].second+1); } answer(ans); return; } } while (prev_permutation(mask.begin(), mask.end())); impossible(); return; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...