제출 #1167119

#제출 시각아이디문제언어결과실행 시간메모리
1167119SmuggingSpunMoney (IZhO17_money)C++20
9 / 100
1 ms328 KiB
#include<bits/stdc++.h>
#define taskname "B"
using namespace std;
int n;
namespace sub1{
    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 <= 8){
        sub1::solve();
    }
}

컴파일 시 표준 에러 (stderr) 메시지

money.cpp: In function 'int main()':
money.cpp:64:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   64 |                 freopen(taskname".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...