제출 #1122919

#제출 시각아이디문제언어결과실행 시간메모리
1122919thelegendary08A Difficult(y) Choice (BOI21_books)C++20
0 / 100
1 ms664 KiB
#include <bits/stdc++.h> #include "books.h" #define vi vector<int> #define pb push_back #define f0r(i,n) for(int i = 0; i<n; i++) using namespace std; // // --- 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. // void solve(int N, int K, long long A, int S) { // TODO implement this function vi v(N, -1); int lo = 0; int hi = N - K; while(lo < hi){ int mid = lo + (hi - lo)/2; int cur = 0; for(int i = mid; i<mid + K; i++){ if(v[i] == -1){ v[i] = skim(i+1); } cur += v[i]; } if(cur >= A){ hi = mid; } else lo = mid + 1; } if(lo == 0){ int cur = 0; f0r(i, K){ cur += v[i]; } if(cur > 2 * A)impossible(); else{ vi ans; f0r(i, K)ans.pb(i + 1); answer(ans); } } else{ if(v[lo-1] == -1){ v[lo-1] = skim(lo); } bool ok = 0; int sum = 0; for(int i = lo-1; i<=lo + K - 1; i++){ sum += v[i]; } int smol = 1e9; for(int i = lo-1; i<=lo + K - 1; i++){ if(sum - v[i] >= A && sum - v[i] <= 2 * A){ vi ans; for(int j = lo-1; j<=lo + K - 1; j++){ if(j != i)ans.pb(j+1); } ok = 1; answer(ans); break; } else if(sum - v[i] < A){ smol = min(smol, i); } } if(!ok){ if(lo + K >= N)impossible(); else{ if(v[lo + K] == -1){ v[lo + K] = skim(lo + K + 1); } int thing = sum - v[smol] - v[lo + K - 1] + v[lo + K]; if(thing >= A && thing <= 2 * A){ vi ans; for(int i = i-1; i<=lo+K; i++){ if(i != lo + K - 1 && i != smol){ ans.pb(i+1); } } 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...