Submission #494878

#TimeUsernameProblemLanguageResultExecution timeMemory
494878PoPularPlusPlusA Difficult(y) Choice (BOI21_books)C++17
100 / 100
3 ms1096 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...