제출 #400537

#제출 시각아이디문제언어결과실행 시간메모리
400537b00n0rpA Difficult(y) Choice (BOI21_books)C++17
0 / 100
3 ms200 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; int a[100005]; // void solve(int N, int K, long long A, int S) { // for(int i = 1; i <= K; i ++) a[i] = skim(i); // int sm = 0; // for(int i = 1; i <= K-1; i ++) sm += a[i]; // if(sm+a[K] > 2*A){ // impossible(); // return; // } // int low = K,high = N,mid,ans; // while(low <= high){ // mid = (low+high)/2; // if(skim(mid)+sm <= 2*A){ // ans = mid; // low = mid+1; // } // else high = mid-1; // } // for(int i = ans; i > ans-K; i --){ // sm += skim(i); // if(sm >= A){ // vector<int> bruh; // for(int j = i; j <= ans; j++) bruh.push_back(j); // for(int j = 1; j <= K-(int)bruh.size(); j ++) bruh.push_back(j); // answer(bruh); // } // sm -= a[K-(ans-i)-2]; // } // } void solve(int N, int K, long long A, int S) { for(int i = 1; i <= N; i ++) a[i] = skim(i); int sm = 0; for(int i = 1; i <= K-1; i ++) sm += a[i]; if(sm+a[K] > 2*A){ impossible(); return; } int low = K,high = N,mid,ans; while(low <= high){ mid = (low+high)/2; if(a[mid]+sm <= 2*A){ ans = mid; low = mid+1; } else high = mid-1; } for(int i = ans; i > ans-K; i --){ sm += a[i]; if(sm >= A){ vector<int> bruh; for(int j = i; j <= ans; j++) bruh.push_back(j); for(int j = 1; j <= K-(int)bruh.size(); j ++) bruh.push_back(j); // cout << "ans: " << sm << endl; assert(sm <= 2*A); answer(bruh); return; } sm -= a[K-(ans-i)-1]; } 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...