제출 #1183911

#제출 시각아이디문제언어결과실행 시간메모리
1183911tamyteA Difficult(y) Choice (BOI21_books)C++20
100 / 100
0 ms408 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; // long long ansA; // int queries = 0; // bool imp = false; // vector<long long> arr; // void answer(vector<int> a) { // long long sum = 0; // cout << "ANSWER = "; // for (auto& u : a) { // cout << u << " "; // sum += arr[u - 1]; // } // cout << endl; // if (sum >= ansA && sum <= 2 * ansA) { // cout << "OK!\n"; // } else { // cout << "WA!\n"; // } // } // void impossible() { // if (imp) cout << "OK!\n"; // else cout << "WA!\n"; // } // long long skim(int i) { // return arr[i - 1]; // } bool ok(long long sum, long long A) { return (sum >= A && sum <= A * 2); } void solve(int N, int K, long long A, int S) { vector<long long> a; long long sum = 0; vector<int> ind; for (int i = 1; i <= K; ++i) { a.push_back(skim(i)); ind.push_back(i); sum += a.back(); } if (ok(sum, A)) { answer(ind); return; } int l = K + 1, r = N; while (l < r) { int m = (l + r) / 2; long long ans = skim(m); if (ans >= A) { r = m; } else { l = m + 1; } } set<int> st; for (int i = max(K + 1, r - K); i <= r; ++i) { ind.push_back(i); a.push_back(skim(i)); } sort(begin(a), end(a)); sort(begin(ind), end(ind)); a.erase(unique(begin(a), end(a)), end(a)); ind.erase(unique(begin(ind), end(ind)), end(ind)); // cout << A << ":\n"; // for (auto& u : a) { // cout << u << " "; // } // cout << endl; sum = 0; for (int i = 0; i < K - 1; ++i) { st.insert(ind[i]); sum += a[i]; } for (int j = K - 1; j < a.size(); ++j) { sum += a[j]; st.insert(ind[j]); if (ok(sum, A)) { answer(vector<int>(begin(st), end(st))); return; } sum -= a[j]; st.erase(ind[j]); } st.insert(ind[K - 1]); sum += a[K - 1]; if (ok(sum, A)) { answer(vector<int>(begin(st), end(st))); return; } for (int i = K; i < a.size(); ++i) { sum -= a[i - K]; st.erase(st.begin()); for (int j = i; j < a.size(); ++j) { sum += a[j]; st.insert(ind[j]); if (ok(sum, A)) { answer(vector<int>(begin(st), end(st))); return; } sum -= a[j]; st.erase(ind[j]); } sum += a[i]; st.insert(ind[i]); } impossible(); } // mt19937 rng(time(NULL)); // int main() { // ifstream cin("input.txt"); // int N, K; // long long A; // int S; // cin >> N >> K >> A >> S; // ansA = A; // set<long long> st; // for (; arr.size() < N;) { // long long s; // cin >> s; // arr.push_back(s); // continue; // long long n = rng() % 100000 + 1; // if (st.count(n)) continue; // st.insert(n); // arr.push_back(n); // } // sort(begin(arr), end(arr)); // // cout << "INITIAL = "; // // for (auto& u : arr) { // // cout << u << " "; // // } // // cout << endl; // solve(N, K, A, S); // }
#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...