제출 #463967

#제출 시각아이디문제언어결과실행 시간메모리
463967MahdiBahramianA Difficult(y) Choice (BOI21_books)C++14
0 / 100
1 ms276 KiB
#include<bits/stdc++.h> #include<books.h> #define pb push_back #define F first #define S second #define mk make_pair #define mt make_tuple using namespace std; typedef long long ll; const int Max = 1e5 + 10; ll ARR[Max]; bool ASK[Max]; int GET(int i) { if(ASK[i]) return ARR[i]; ASK[i] = 1; return ARR[i] = skim(i); } ll SUM(int l , int r) { ll ans = 0; for(int i = l ; i <= r ; i++) ans += GET(i); return ans; } void solve(int N , int K , ll A , int S) { ll cur = 0; for(int i = 1 ; i < K ; i++) cur += GET(i); if(cur + GET(K) > 2 * A) return impossible(); if(cur + GET(K) >= A) { vector<int> res; for(int i = 1 ; i <= K ; i++) res.pb(i); return answer(res); } int l = 0 , r = N + 1; while(r - l > 1) { int md = (l + r) >> 1; if(cur + GET(md) >= A) r = md; else l = md; } if(cur + GET(r) <= 2 * A) { vector<int> res; for(int i = 1 ; i < K ; i++) res.pb(i); return answer(res); } for(int ln = K - 1 ; ln >= 0 ; ln--) { if(SUM(1 , ln) + SUM(l - K + ln + 1 , l) >= A) { vector<int> res; for(int i = 1 ; i <= ln ; i++) res.pb(i); for(int i = l - K + ln + 1 ; i <= K ; i++) res.pb(i); return answer(res); } } 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...