Submission #850637

#TimeUsernameProblemLanguageResultExecution timeMemory
850637vjudge1A Difficult(y) Choice (BOI21_books)C++17
45 / 100
1 ms1364 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; // typedef long long l; vector<int> get_ans(vector<bool>& in){ vector<int> ans; for(int i = 0; i < (int)in.size(); i++){ if(in[i]) ans.push_back(i+1); } return ans; } void solve(int N, int K, long long A, int S) { vector<long long> v(N); vector<bool> in(N, 0); long long sum = 0; for(int i = 0; i < K; i++){ v[i] = skim(i+1); in[i] = 1; sum += v[i]; } if(sum > 2 * A) {impossible(); return;} if(sum >= A){ answer(get_ans(in)); return; } if(K == N) {impossible(); return;} int ind = N - 1; for(int i = K - 1; i >= 0; i--){ v[ind] = skim(ind + 1); if(sum - v[i] + v[ind] > 2 * A){ int lo = i + 1; int hi = ind - 1; sum -= v[i]; in[i] = 0; while(lo <= hi){ int mid = (lo + hi) / 2; v[mid] = skim(mid + 1); if(sum + v[mid] >= A && sum + v[mid] <= 2 * A){ in[mid] = 1; answer(get_ans(in)); return; }else if(sum + v[mid] < A){ lo = mid + 1; }else{ hi = mid - 1; } } impossible(); return; }else{ sum -= v[i]; sum += v[ind]; in[i] = 0; in[ind] = 1; if(sum >= A){ answer(get_ans(in)); return; } } ind--; } 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...