제출 #555800

#제출 시각아이디문제언어결과실행 시간메모리
555800someoneA Difficult(y) Choice (BOI21_books)C++14
0 / 100
1 ms976 KiB
#include "books.h" #include <bits/stdc++.h> #define ll long long using namespace std; const int N = 1e5 + 42, INF = 1e9, MOD = 1e9 + 7; ll val[N]; ll get(int i) { if(val[i] == -1) val[i] = skim(i); return val[i]; } int dicho(int deb, int fin, int maxi) { if(deb + 1 == fin) return deb; int med = (deb + fin) >> 1; if(get(med) <= maxi) return dicho(med, fin, maxi); return dicho(deb, med, maxi); } void solve(int n, int k, ll a, int s) { for(int i = 0; i < N; i++) val[i] = -1; ll sum = 0; for(int i = 1; i <= k; i++) sum += get(i); if(sum > 2 * a) { impossible(); return; } if(sum >= a) { vector<int> v; for(int i = 1; i <= k; i++) v.push_back(i); answer(v); return; } int id = dicho(k, n+1, 2*a - sum + get(k)); for(int i = k; i > 0; i--) { sum -= get(i); sum += get(id + i - k); if(a <= sum && sum <= 2 * a) { vector<int> v; for(int j = 1; j < i; j++) v.push_back(j); for(int j = id + i - k; j <= id; j++) v.push_back(j); answer(v); 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...