제출 #941546

#제출 시각아이디문제언어결과실행 시간메모리
941546XiaoyangA Difficult(y) Choice (BOI21_books)C++17
5 / 100
6 ms856 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define fi first #define se second #define pll pair<ll,ll> #define pb push_back #define debug(x) cerr<<#x<<"="<<x<<endl; #define MP make_pair #define rep(i,a,b) for(ll i=a;i<b;i++) #define SZ(x) (ll)x.size() #define ALL(x) x.begin(),x.end() #define endl "\n" const ll inf=1e18; const ll maxn=1e5+5; ll diff[maxn]; ll d(ll x){ if(diff[x])return diff[x]; return diff[x]=skim(x); } void solve(int n, int k, long long A, int s) { // TODO implement this function if(s==n and n<=1000 and k==3){ rep(i,1,n+1){ diff[i]=skim(i); } diff[n+1]=inf; rep(i,1,n-1){ rep(j,i+1,n){ ll sum=diff[i]+diff[j]; ll id=lower_bound(diff+j+1,diff+n+1,A-sum)-diff; if(id==n+1 or diff[i]+diff[j]+diff[id]>2*A)break; else{ vector<int>ans; ans.pb(i); ans.pb(j); ans.pb(id); answer(ans); return; } } } impossible(); } int lo=1,hi=n; while(lo<hi){ ll mid=(lo+hi)>>1; if(d(mid)<(A+k-1)/k)lo=mid+1; else hi=mid; } if(lo+k>n){ ll tmp=0; ll loo=lo-(n-k); vector<int>ans; rep(i,loo,loo+k){ tmp+=d(i); ans.pb(i); } if(tmp>=A)answer(ans); else impossible(); } vector<int>ans; rep(i,lo,min(lo+k,n+1))ans.pb(i); answer(ans); }
#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...