Submission #1179703

#TimeUsernameProblemLanguageResultExecution timeMemory
1179703WH8A Difficult(y) Choice (BOI21_books)C++20
20 / 100
1 ms1176 KiB
#include <bits/stdc++.h> #include "books.h" #define f first #define s second using namespace std; // // --- Sample implementation for the task books --- // // To compile this program with the sample grader, place: // books.h books_sample.cpp sample_grader.cpp // in a single folder and run: // g++ books_sample.cpp sample_grader.cpp // in this folder. // void solve(int N, int k, long long A, int S) { int hi=N,lo=1,m; int ans=N+1; vector<long long> val(N+1, -1); //~ for(int i=1;i<=N;i++){ //~ val[i]=skim(i); //~ } //~ ans=lower_bound(val.begin(),val.end(),A)-val.begin(); //~ for(int i=1;i<=N;i++){ //~ for(int j=i+1;j<=N;j++){ //~ for(int k=j+1;k<=N;k++){ //~ long long cur = val[i]+val[j]+val[k]; //~ if(cur<=2*A and cur>=A){ //~ answer({i,j,k}); //~ return; //~ } //~ } //~ } //~ } //~ impossible(); while(lo<=hi){ m=(lo+hi)/2; val[m]=skim(m); if(val[m]>=A){ ans=m; hi=m-1; } else{ lo=m+1; } } if(ans<k){ impossible(); return; } if(true){ vector<int> out; long long sm=0; for(int i=1;i<=k-1;i++){ sm+=(val[i]==-1? skim(i) : val[i]); out.push_back(i); } out.push_back(ans); sm+=(val[ans]==-1? skim(ans) : val[ans]); if(sm>=A and sm <= 2*A){ answer(out); return; } else if (ans==k){ impossible(); return; } } vector<pair<long long,int>> pref, suff; for(int i=1;i<=k;i++){ pref.push_back({(val[i]==-1? skim(i) : val[i]),i}); } for(int i=ans-1;i>=ans-k;i--){ suff.push_back({(val[i]==-1? skim(i) : val[i]),i}); } for(int i=0;i<=k;i++){ long long check2=0; vector<int> out; for(int j=0;j<i;j++){ check2+=pref[j].f; out.push_back(pref[j].s); } for(int j=0;j<k-i;j++){ check2+=suff[j].f; out.push_back(suff[j].s); } if(check2>=A and check2 <= 2 *A){ answer(out); 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...