제출 #619661

#제출 시각아이디문제언어결과실행 시간메모리
619661NicolaAbusaad2014A Difficult(y) Choice (BOI21_books)C++14
100 / 100
2 ms1128 KiB
#include<vector> #include<cstdio> #include<set> #include<cstdlib> #include<cstdarg> #include<cassert> #include"books.h" using namespace std; void solve(int N, int K, long long A, int S) { if(skim(1)>=A){ impossible(); return; } long long idx=0,jump=N,sum=0; while(jump&(jump-1)){ jump=jump&(jump-1); } while(jump){ if(idx+jump<N&&skim(idx+jump+1)<=A){ idx+=jump; } jump/=2; } vector<long long>v(N); vector<int>ans; for(int i=0;i<K;i++){ v[i]=skim(i+1); ans.push_back(i+1); sum+=v[i]; } if(sum>2*A){ impossible(); return; } if(A<=sum){ answer(ans); return; } for(int i=max(0ll,idx-K+1);i<=min((long long)N-1,idx+1);i++){ v[i]=skim(i+1); } if(A<=sum-v[K-1]+v[min((long long)N-1,idx+1)]&&sum-v[K-1]+v[min((long long)N-1,idx+1)]<=2*A){ ans.pop_back(); ans.push_back(min((long long)N-1,idx+1)+1); answer(ans); return; } int x=0; for(int i=min((long long)N-1,idx);i>=max(idx-K+1,(long long)K);i--){ sum-=v[x]; sum+=v[i]; x++; ans.erase(ans.begin()); ans.push_back(i+1); if(A<=sum&&sum<=2*A){ answer(ans); return; } } impossible(); }
#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...