제출 #900957

#제출 시각아이디문제언어결과실행 시간메모리
900957simona1230A Difficult(y) Choice (BOI21_books)C++17
20 / 100
151 ms1676 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; while(l<=r) { int m=(l+r)/2; int ll=skim(m); int rr=skim(m+k-1); int minn=ll*(2*ll+k-2)/2+rr; int 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...