제출 #1128822

#제출 시각아이디문제언어결과실행 시간메모리
1128822adrilenA Difficult(y) Choice (BOI21_books)C++17
0 / 100
1 ms1196 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; using ll = long long; // // --- Sample implementation for the task books --- // // To compile this program with the sample grader, place: // books.h books_sample.cpp sample_grader.cpp // in a single folder and run: // g++ books_sample.cpp sample_grader.cpp // in this folder. // ll tri(ll a) { return a * (a + 1) / 2; } void ans(set<int>a) { vector<int> v(a.begin(),a.end()); for (int &i : v) i++; answer(v); } void solve(int n, int k, long long a, int s) { vector<ll> v(n); for (int i = 0; i < n; i++) { v[i] = skim(i+1); } int l = 0, u = n - 1; ll c; while (l < u) { int mid = (l + u + 1) / 2; c = v[mid] * k - tri(k - 1); if (c < a) l = mid; else u = mid - 1; } ll total = 0; if (l < k - 1) l = k - 1; set<int> current; for (int i = 0; i < k; i++) { total += v[l - i]; current.insert(l - i); } if (a <= total && 2 * a >= total) { ans(current); return; } if (total >= 2 * a) { impossible(); return ; } while (true) { l++; if (l == n) impossible(); ll nex = v[l]; bool done = false; for (ll i : current) { if (total + nex - v[i] > 2 * a) continue; current.erase(v[i]); current.insert(l); total += nex - i; done = true; if (total >= a) ans(current); break; } if (!done) impossible(); } 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...