제출 #1157592

#제출 시각아이디문제언어결과실행 시간메모리
1157592minh30082008A Difficult(y) Choice (BOI21_books)C++20
100 / 100
24 ms1192 KiB
#include<bits/stdc++.h>
#define INF 1e18
#define fi first
#define se second
#define FOR(i, k, n) for(ll i = k; i <= n; i++)
#define FOR1(i, k, n) for(ll i = k; i >= n; i--)
#define pb push_back
#define fastio ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define vi vector<int>
#define pii pair<int, int>
#define vii vector<pii>
//#define ll long long
#define vll vector<ll>
#define pll pair<ll, ll>
#define re return 0
#define mii map<int, int>
#define input "chinaflu.inp"
#define output "chinaflu.out"
#define rf 	freopen(input, "r", stdin); freopen(output, "w", stdout)
using namespace std;
const int maxn = 1e5 + 5;
const int mod = 1e9 + 9;
const int base = 998244353;
void add(int &a, int b) 
{
	a += b; 
	if(a >= mod) a -= mod; 
	if(a < 0) a += mod; 
}
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
int rand(int l, int r)
{
	return uniform_int_distribution<int>(l, r) (rd);
}

#include<vector>
#include<cstdio>
#include<set>
#include<cstdlib>
#include<cstdarg>
#include<cassert>
#include"books.h"

using namespace std;

typedef long long ll;
ll a[maxn];
void solve(int n, int k, ll A, int S)
{
	FOR(i, 1, n)
		a[i] = -1;
	FOR(i, 1, k)
		a[i] = skim(i);
	int l = 1, r = n, vt = -1;
	while(l <= r)
	{
		int mid = (l + r) >> 1;
		if(a[mid] == -1)
			a[mid] = skim(mid);
		if(a[mid] >= A)
			vt = mid, r = mid - 1;
		else
			l = mid + 1;
	}
	if(vt == -1)
		vt = n;
	int cnt = 0;
	vll vv;
	FOR(i, 1, k)
		vv.pb(i);
	while(cnt <= k && vt)
	{
		if(a[vt] == -1)
		{
			a[vt] = skim(vt);
		}
		if(vt <= k)
			break;
		cnt++;
		vv.pb(vt);
		vt--;
	}
	FOR(mask, 1, (1 << vv.size()) - 1)
	{
		if(__builtin_popcount(mask) != k)
			continue;
		ll sum = 0;
		FOR(i, 0, vv.size() - 1)
			if((mask >> i) & 1)
				sum += a[vv[i]];
		if(sum >= A && sum <= 2 * A)
		{
			vi ans;
			FOR(i, 0, vv.size() - 1)
				if((mask >> i) & 1)
					ans.pb(vv[i]);
			answer(ans);
		}
	}
	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...