제출 #1066950

#제출 시각아이디문제언어결과실행 시간메모리
1066950vjudge1A Difficult(y) Choice (BOI21_books)C++17
60 / 100
2 ms1116 KiB
//Dost SEFEROĞLU #include <bits/stdc++.h> #include "books.h" using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> using namespace std; void solve(int32_t N, int32_t K, long long A, int32_t S) { int l = 1; int r = N-K+1; vi memory(N+1,0); while (l<=r) { int m = (l+r) >> 1; int sm = 0; for (int j=m+K-1;j>=m;j--) { if (!memory[j]) memory[j] = skim(j); if (sm+memory[j]*(j-m+1) < A) break; sm+=memory[j]; if (sm >= A) break; } if (sm >= A) r = m-1; else l = m+1; } if (l > N-K+1) impossible(); int sm = 0; for (int j=l;j<=l+K-1;j++) { if (!memory[j]) memory[j] = skim(j); sm+=memory[j]; } if (sm >= A && sm <= 2*A) { vector<int32_t> v; for (int j=l;j<=l+K-1;j++) v.push_back(j); answer(v); return; } sm = memory[l+K-1]; for (int j=1;j<=K-1;j++) { if (!memory[j]) memory[j] = skim(j); sm+=memory[j]; } if (sm <= 2*A) { assert(sm >= A); vector<int32_t> v; for (int j=1;j<=K-1;j++) v.push_back(j); v.push_back(l+K-1); answer(v); return; } 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...