제출 #1038455

#제출 시각아이디문제언어결과실행 시간메모리
1038455HorizonWestA Difficult(y) Choice (BOI21_books)C++17
45 / 100
1 ms1140 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; #pragma GCC optimize("O3") #define endl '\n' #define db double #define ll long long #define pb push_back #define fs first #define sd second #define Mod long(1e9 + 7) #define all(x) x.begin(), x.end() #define unvisited long(-1) #define Eps double(1e-9) #define _for(i, n) for(int i = 0; i < (n); i++) #define dbg(x) cout << #x ": " << x << endl; // // --- 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. // bool check(ll sum, ll a){ return (sum >= a && sum <= 2*a); } void solve(int n, int k, long long a, int s) { vector <ll> v(n+1, -1); vector <int> ans; ll sum = 0; map <int, int> mp; for(int i = 1; i <= k; i++){ v[i] = skim(i); ans.push_back(i); sum += v[i]; mp[i] = 1; } if(sum > 2*a){ impossible(); return; }else if(check(sum, a)){ answer(ans); return; } reverse(all(ans)); int l = k, r = n+1; while (abs(l - r) != 1) { int mid = (l + r) / 2; if(v[mid] == -1){ v[mid] = skim(mid); } ll tmp = sum + (v[mid] - ans[0]); if(tmp >= sum && tmp <= 2*a) l = mid; else r = mid; } priority_queue <pair<ll, int>> pq, px; for(int i = 0; i < k; i++) if(l - i >= 0){ if(v[l-i] == -1){ v[l-i] = skim(l-i); } pq.push({ v[l-i], l-i }); } for(auto& u : ans){ if(check(sum, a)) break; while (!px.empty()){ pq.push(px.top()); px.pop(); } while (!pq.empty()){ if(mp[pq.top().sd] == 1){ px.push(pq.top()); pq.pop(); } else break; } if(pq.empty()) continue; if(pq.top().fs <= v[u]) continue; sum = sum + (pq.top().fs - v[u]); u = pq.top().sd; pq.pop(); } if(check(sum, a)) answer(ans); else 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...