Submission #900996

#TimeUsernameProblemLanguageResultExecution timeMemory
900996simona1230A Difficult(y) Choice (BOI21_books)C++17
60 / 100
132 ms1484 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; long long n,k,a,s; long long x[120001]; void know_all() { for(long long i=1; i<=n; i++) { x[i]=skim(i); } long long fk=0,fs=0,fsidx=0; for(int i=1; i<=n; i++) { if(i<k)fk+=x[i]; if(x[i]>=a) { fs=x[i]; fsidx=i; break; } } if(fs+fk>=a&&fs+fk<=2*a) { vector<int> ans; for(int i=1; i<k; i++) ans.push_back(i); ans.push_back(fsidx); answer(ans); return; } long long sum=0; for(int i=1; i<=n; i++) { sum+=x[i]; if(i>k)sum-=x[i-k]; if(i>=k&&sum>=a&&sum<=2*a) { vector<int> ans; for(int j=i-k+1; j<=i; j++) ans.push_back(j); answer(ans); return; } } impossible(); } long long val(int idx) { if(x[idx]==0)x[idx]=skim(idx); return x[idx]; } void solve(int N,int K,long long A,int S) { n=N; k=K; a=A; s=S; if(s==n) { know_all(); return; } int lidx=1,ridx=n,idx=0; while(lidx<=ridx) { int m=(lidx+ridx)/2; if(val(m)>=a) { idx=m; ridx=m-1; } else lidx=m+1; } if(idx!=0) { long long fk=0; for(int i=1; i<k; i++) fk+=val(i); if(fk+val(idx)>=a&&fk+val(idx)<=2*a) { vector<int> ans; for(int i=1; i<k; i++) ans.push_back(i); ans.push_back(idx); answer(ans); return; } } int l=1,r=n-k+1; while(l<=r) { int m=(l+r)/2; long long sum=0; for(int i=m; i<=m+k-1; i++) sum+=val(i); if(sum>=a&&sum<=2*a) { vector<int> ans; for(int i=m; i<=m+k-1; i++) ans.push_back(i); answer(ans); return; } if(sum<a)l=m+1; else r=m-1; } 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...