제출 #414754

#제출 시각아이디문제언어결과실행 시간메모리
414754amunduzbaevA Difficult(y) Choice (BOI21_books)C++14
0 / 100
3084 ms200 KiB
#include "books.h" #include <bits/stdc++.h> #ifndef EVAL #include "grader.cpp" #endif using namespace std; #define int long long #define i32 int32_t #define pb push_back #define ff first #define ss second template<class T> bool umin(T& a, const T b) { if(a > b) { a = b; return 1; } return 0; } template<class T> bool umax(T& a, const T b) { if(a < b) { a = b; return 1; } return 0; } const int M = 2e5+5; const long long inf = 1e18; int a[M], pref[M]; void solve(i32 n, i32 k, int A, i32 s) { if(s < n) { impossible(); return; } for(i32 i=1;i<=n;i++) a[i] = skim(i); for(int i=1;i<=n;i++) pref[i] = pref[i-1] + a[i]; int res = inf, l = -1, r = -1; for(int i=k;i<=n;i++){ if(pref[i] - pref[i-k] >= A && umin(res, pref[i] - pref[i-k])) l = i-k+1, r = i; } if(l == -1) { impossible(); return; } set<pair<int, int>> ss; for(int i=l;i<=r;i++) ss.insert({a[i], i}); for(int i=1;i<l;i--){ if(res <= 2*A) continue; int bad = -1; for(auto x : ss){ if(res - x.ff + a[i] < A) break; bad = i; } if(~bad) ss.erase({a[bad], bad}), ss.insert({a[i], i}), res = res - a[bad] + a[i]; } if(res >= A && res <= 2*A){ vector<i32> rr; for(auto x : ss) rr.pb(x.ss); answer(rr); } else impossible(); return; } /* 4 2 10 5 5 10 17 25 */
#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...