# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1167120 | SmuggingSpun | Money (IZhO17_money) | C++20 | 26 ms | 400 KiB |
#include<bits/stdc++.h>
#define taskname "B"
using namespace std;
int n;
namespace sub12{
void solve(){
vector<int>a(n);
for(int& x : a){
cin >> x;
}
int ans = n;
for(int mask = (1 << (n - 1)) - 2; mask > -1; mask--){
vector<pair<int, int>>range(1, make_pair(0, 0));
bool flag = true;
for(int i = 1; i < n; i++){
if(1 << (i - 1) & mask){
range.emplace_back(i, i);
}
else{
if(a[i] < a[range.back().second]){
flag = false;
break;
}
range.back().second = i;
}
}
if(flag && range.size() < ans){
vector<int>b;
for(auto& [l, r] : range){
if(b.empty()){
b = vector<int>(a.begin() + l, a.begin() + r + 1);
continue;
}
if(a[r] <= b[0]){
b.insert(b.begin(), a.begin() + l, a.begin() + r + 1);
}
else if(a[l] >= b.back()){
b.insert(b.end(), a.begin() + l, a.begin() + r + 1);
}
else{
flag = false;
for(int i = 0; i + 1 < b.size() && !flag; i++){
if(b[i] <= a[l] && b[i + 1] >= a[r]){
b.insert(b.begin() + i + 1, a.begin() + l, a.begin() + r + 1);
flag = true;
}
}
if(!flag){
break;
}
}
}
if(flag){
ans = range.size();
}
}
}
cout << ans;
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(fopen(taskname".inp", "r")){
freopen(taskname".inp", "r", stdin);
}
cin >> n;
if(n <= 20){
sub12::solve();
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |