Submission #900963

#TimeUsernameProblemLanguageResultExecution timeMemory
900963simona1230A Difficult(y) Choice (BOI21_books)C++17
20 / 100
118 ms1376 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(); } 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 l=1,r=n-k+1; while(l<=r) { int m=(l+r)/2; long long ll=skim(m); long long rr=skim(m+k-1); long long minn=ll*(2*ll+k-2)/2+rr; long long maxx=rr*(2*rr-k+2)/2+ll; if(minn>=a&&maxx<=2*a) { vector<int> ans; for(int i=m;i<=m+k-1;i++) ans.push_back(i); answer(ans); return; } if(minn<a&&maxx>2*a) { impossible(); return; } if(minn<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...