| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1344919 | Choco | A Difficult(y) Choice (BOI21_books) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "books.h"
using namespace std;
#pragma GCC optimize("O3")
#define ll int
#define double double long
#define fori(i,j,k) for(ll i=j; i<=k;i++)
#define study ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define pb push_back
#define all(s) s.begin(),s.end()
#define ins insert
#define ss second
#define ff first
#ifndef DB
#define DB 0
#endif
#define debugl(l) if constexpr((l)<DB)
#define debug debugl(0)
const ll sz=1e4+10;
ll INF=1e9;
ll mod=1e9+7;
//
// --- 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) {
vector<ll>v(N+10,0);
ll l=1,r=N;
while(l<=r){
ll mid=(l+r)>>1;
if(v[mid]==0)
v[mid]=skim(mid);
if(v[mid]<=A){
l=mid+1;
}
else{
r=mid-1;
}
}
l--;
if(l<K)
impossible();
set<ll>st;
fori(i,1,K){
st.ins(i);
}
fori(i,l-K,l)
st.ins(i);
vector<ll>idk;
for(auto x: st){
if(v[i]==0)
v[x]=skim(x);
idk.pb(x);
}
vector<ll>ans;
do{
ll sum=0;
fori(i,0,K-1){
sum+=v[idk[i]];
}
if(sum>=A and 2*A>=sum){
fori(i,0,K-1){
ans.pb(idk[i]);
}
}
break;
}while(next_permutation(all(idk)));
answer(ans);
}
