Submission #494877

#TimeUsernameProblemLanguageResultExecution timeMemory
494877PoPularPlusPlusA Difficult(y) Choice (BOI21_books)C++17
0 / 100
3 ms1992 KiB
#include <bits/stdc++.h>
//#include"books.h"
using namespace std;
#define ll long long
#define ull unsigned long long 
#define pb(e) push_back(e)
#define sv(a) sort(a.begin(),a.end())
#define sa(a,n) sort(a,a+n)
#define mp(a,b) make_pair(a,b)
#define vf first
#define vs second
#define ar array
#define all(x) x.begin(),x.end()
const int inf = 0x3f3f3f3f;
const int mod = 1000000007; 
const double PI=3.14159265358979323846264338327950288419716939937510582097494459230;
bool remender(ll a , ll b){return a%b;}

ll skim(int x);

void answer(vector<int> v);

void impossible();

void solve(int n , int k , ll a , int s){
	 ll arr[n + 1];
	 memset(arr,-1,sizeof arr);
	 for(int i = 1; i <= k; i++){
		 if(arr[i] == -1)
			arr[i] = skim(i);
	 }
	 int l = k , r = n;
	 ll sum = 0;
	 for(int i = 1; i <= k-1; i++)sum += arr[i];
	 if(sum + arr[k] > 2 * a){
		 impossible();
		 return;
	 }
	 int x = k;
	 while(l <= r){
		 int mid = (l + r)/2;
		 if(arr[mid]==-1)arr[mid] = skim(mid);
		 if(sum + arr[mid] >= a && sum + arr[mid] <= 2 * a){
			 vector<int> v;
			 for(int i = 1; i <= k-1; i++)v.pb(i);
			 v.pb(mid);
			 answer(v);
			 return;
		 }
		 if(sum + arr[mid] < a){
			 x  = mid;
			 l = mid + 1;
		 }
		 else {
			 r = mid - 1;
		 }
	 }
	 for(int i = x; i > x-k; i++){
		 if(arr[i]==-1)arr[i] = skim(i);
	 }
	 sum += arr[k];
	 if(sum >= a && sum <= 2 * a){
		 vector<int> v;
		 for(int i = 1; i <= k; i++)v.pb(i);
		 answer(v);
		 return;
	 }
	 for(int i = 0; i < k; i++){
		 sum -= arr[k - i];
		 sum += arr[x - i];
		 if(sum >= a && sum <= 2 * a){
			 vector<int> v;
			 for(int j = 1; j < k - i; j++)v.pb(j);
			 for(int j = x; j >= x - i; j--)v.pb(j);
			 sv(v);
			 answer(v);
			 return;
		 }
	 }
	 impossible();
}

/*
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
	//int t;cin >> t;while(t--)
	solve();
	return 0;
}
*/
#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...