Submission #501833

#TimeUsernameProblemLanguageResultExecution timeMemory
501833Carmel_Ab1Money (IZhO17_money)C++17
25 / 100
832 ms312 KiB
/*
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
 */
#include<bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

//using namespace __gnu_pbds;
using namespace std;

typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int>vi;
typedef vector<vector<int>>vvi;
typedef vector<ll>vl;
typedef vector<vl> vvl;
typedef pair<int,int>pi;
typedef pair<ll,ll> pl;
typedef vector<pl> vpl;
typedef vector<ld> vld;
typedef pair<ld,ld> pld;
typedef vector<pi> vpi;

//typedef tree<ll, null_type, less_equal<ll>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
template<typename T> ostream& operator<<(ostream& os, vector<T>& a){os<<"[";for(int i=0; i<ll(a.size()); i++){os << a[i] << ((i!=ll(a.size()-1)?" ":""));}os << "]\n"; return os;}

#define all(x) x.begin(),x.end()
#define YES out("YES")
#define NO out("NO")
#define out(x){cout << x << "\n"; return;}
#define outfl(x){cout << x << endl;return;}
#define GLHF ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define print(x){for(auto ait:x) cout << ait << " "; cout << "\n";}
#define pb push_back
#define umap unordered_map

template<typename T1, typename T2> istream& operator>>(istream& is, pair<T1, T2>& p){is >> p.first >> p.second;return is;}
template<typename T1, typename T2> ostream& operator<<(ostream& os, pair<T1, T2>& p){os <<"" << p.first << " " << p.second << ""; return os;}
void usaco(string taskname){
    string fin = taskname + ".in";
    string fout = taskname + ".out";
    const char* FIN = fin.c_str();
    const char* FOUT = fout.c_str();
    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);
}
template<typename T>
void read(vector<T>& v){
    int n=v.size();
    for(int i=0; i<n; i++)
        cin >> v[i];
}
template<typename T>
vector<T>UNQ(vector<T>a){
    vector<T>ans;
    for(T t:a)
        if(ans.empty() || t!=ans.back())
            ans.push_back(t);
    return ans;
}



void solve();
int main(){
    GLHF;
    int t=1;
    //cin >> t;
    while(t--)
        solve();
}
bool ok(vi b,int l,int r){
    for(int i=0; i+1<b.size(); i++)
        if(b[i]<=l && r<=b[i+1])return 1;
    return 0;
}
void solve() {
    int n;
    cin >> n;
    vi a(n);
    read(a);

    if(is_sorted(all(a)))out(0)

    int ans=1e9;

    for(int i=1; i<(1<<(n)); i++){
        vvi b={{}};
        for(int j=0; j<n; j++){
            if(i&(1<<j)){
                b.back().pb(a[j]);
                b.pb({});
            }
            else{
                b.back().pb(a[j]);
            }
        }

        if(!b.back().size())
            b.pop_back();
        bool okk=1;
        for(int i=0; i<b.size(); i++)
            okk&=(is_sorted(all(b[i])));
        if(!okk)continue;

        vi prv={int(-1e9),int(1e9)};

        for(int x:b[0])
            prv.pb(x);
        sort(all(prv));
        for(int i=1;okk && i<b.size(); i++){
            int l=*min_element(all(b[i])),r=*max_element(all(b[i]));
            bool has=0;
            for(int j=0;!has && j+1<prv.size(); j++){
                if((prv[j]<=l && r<=prv[j+1]))
                    has=1;
            }
            if(!has)
                okk=0;
            for(int x:b[i])
                prv.pb(x);
            sort(all(prv));
        }

        if(okk)
            ans=min(ans,__builtin_popcount(i));
    }
    out(ans+1)
}
/*
 6
 3 6 4 5 1 2
 */

Compilation message (stderr)

money.cpp: In function 'bool ok(vi, int, int)':
money.cpp:76:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |     for(int i=0; i+1<b.size(); i++)
      |                  ~~~^~~~~~~~~
money.cpp: In function 'void solve()':
money.cpp:105:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |         for(int i=0; i<b.size(); i++)
      |                      ~^~~~~~~~~
money.cpp:114:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  114 |         for(int i=1;okk && i<b.size(); i++){
      |                            ~^~~~~~~~~
money.cpp:117:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  117 |             for(int j=0;!has && j+1<prv.size(); j++){
      |                                 ~~~^~~~~~~~~~~
money.cpp: In function 'void usaco(std::string)':
money.cpp:47:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |     freopen(FIN, "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~
money.cpp:48:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |     freopen(FOUT, "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...