Quick actions

cmd+k|ctrl+k

Navigation

Languages

Untitled

Snippet info

Language

Cpp

Visibility

unlisted

Author

legacy-anonymous

Created

2024-06-30T18:01:01.201684Z

Updated

2024-06-30T18:01:01.201684Z

#include<bits/stdc++.h>

using namespace std;

map<vector<int>,int> mp;

int rep(vector<int> &a){
  if(a.empty()){return 0;}
  if(mp.find(a)!=mp.end()){
    return mp[a];
  }
  int res=0;
  for(int i=1;i<a.size();i++){
    if(a[i-1]==i){
      vector<int> und;
      for(int j=0;j<a.size();j++){
        if(j==i-1 || j==i){continue;}
        und.push_back(a[j]);
      }
      res=max(res,rep(und)+1);
    }
  }
  mp[a]=res;
  return res;
}

int pow(int a,int b){int i,r=1;for(i=1;i<=b;i++){r*=a;}return r;}

int greedy(vector<int> a){
  int res=0;
  while(true){
    bool fin=true;
    for(int i=((int)a.size())-1;i>=1;i--){
      if(a[i-1]==i){
        vector<int> na;
        for(int j=0;j<a.size();j++){
          if(j==i-1 || j==i){continue;}
          na.push_back(a[j]);
        }
        res++;
        a=na;
        fin=false;
        break;
      }
    }
    if(fin){break;}
  }
  return res;
}

int main(){
  std::random_device seed_gen;
  std::mt19937_64 engine(seed_gen());

  int fail=0;

  while(true){
    if(mp.size()>2e6){mp.clear();}
    int n=1+(engine()%30);
    vector<int> a(n);
    for(auto &nx : a){
      nx=rand()%n+1;
    }

    int ok=rep(a);
    int gd=greedy(a);
    if(ok!=gd){
      cout << a.size() << "\n";
      for(auto &nx : a){
        cout << nx << " ";
      }cout << "\n";
      cout << ok << " " << gd << "\n";
      fail++;
      if(fail>=5){break;}
    }
  }
  return 0;
}
INFO