제출 #863729

#제출 시각아이디문제언어결과실행 시간메모리
863729TAhmed33A Difficult(y) Choice (BOI21_books)C++17
60 / 100
1 ms856 KiB
#include <bits/stdc++.h> #include <books.h> using namespace std; typedef long long ll; void solve (int n, int k, ll a, int s) { map <int, ll> dd; int l = 1, r = n - k + 1; int ans = -1; while (l <= r) { int mid = (l + r) >> 1; ll sum = 0; for (int i = mid; i <= mid + k - 1; i++) { if (!dd.count(i)) { dd[i] = skim(i); } sum += dd[i]; } if (sum >= a) { r = mid - 1; ans = mid; } else { l = mid + 1; } } if (ans != -1) { ll t = 0; for (int i = ans; i <= ans + k - 1; i++) t += dd[i]; if (t <= 2 * a) { vector <int> ret; for (int i = ans; i <= ans + k - 1; i++) ret.push_back(i); answer(ret); } } ll sum = 0; for (int i = 1; i < k; i++) { if (!dd.count(i)) dd[i] = skim(i); sum += dd[i]; } l = k; r = n; ans = -1; while (l <= r) { int mid = (l + r) >> 1; if (!dd.count(mid)) dd[mid] = skim(mid); if (dd[mid] > a) { r = mid - 1; ans = mid; } else { l = mid + 1; } } if (ans != -1) { if (sum + dd[ans] >= a && sum + dd[ans] <= 2 * a) { vector <int> ret; for (int i = 1; i < k; i++) ret.push_back(i); ret.push_back(ans); answer(ret); } } 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...