Submission #1137817

#TimeUsernameProblemLanguageResultExecution timeMemory
1137817huutuanBroken Device 2 (JOI22_device2)C++20
55 / 100
494 ms23732 KiB
#include "Anna.h"
#include <utility>
#include <vector>

#include <bits/stdc++.h>

using namespace std;

namespace Anna_solver{
   const int M=2000;
   int Declare(){
      return M;
   }
   mt19937 rng(69420);
   pair<vector<int>, vector<int>> Anna(unsigned long long A){
      unsigned long long val=uniform_int_distribution<unsigned long long>(0, ULLONG_MAX)(rng);
      A^=val;
      vector<int> v;
      v.push_back(1);
      while (1){
         vector<int> vv;
         vector<int> ord(64); iota(ord.begin(), ord.end(), 0);
         shuffle(ord.begin(), ord.end(), rng);
         for (int j:ord){
            if (A>>j&1) vv.push_back(0);
            vv.push_back(1);
         }
         if ((int)v.size()+(int)vv.size()>M) break;
         v.insert(v.end(), vv.begin(), vv.end());
      }
      return {vector<int>(v.size(), 0), v};
   }
}

int Declare() {
   return Anna_solver::Declare();
}

std::pair<std::vector<int>, std::vector<int> > Anna(long long A) {
   return Anna_solver::Anna(A);
}
#include "Bruno.h"
#include <utility>
#include <vector>

#include <bits/stdc++.h>

using namespace std;

namespace Bruno_solver{
   const int M=2000;
   mt19937 rng(69420);
   long long Bruno(vector<int> v){
      unsigned long long val=uniform_int_distribution<unsigned long long>(0, ULLONG_MAX)(rng);
      unsigned long long ans=ULLONG_MAX;
      vector<int> id, d;
      for (int i=0; i<(int)v.size(); ++i){
         if (v[i]==1) id.push_back(i);
      }
      for (int i=0; i<(int)id.size()-1; ++i){
         d.push_back(id[i+1]-id[i]-1);
      }
      for (int i=0; i<(int)d.size()/64; ++i){
         vector<int> ord(64); iota(ord.begin(), ord.end(), 0);
         shuffle(ord.begin(), ord.end(), rng);
         unsigned long long a=0;
         for (int j=i*64; j<(i+1)*64; ++j){
            if (d[j]) a|=1ull<<ord[j%64];
         }
         ans&=a;
      }
      vector<int> ord(64); iota(ord.begin(), ord.end(), 0);
      shuffle(ord.begin(), ord.end(), rng);
      return ans^val;
   }
}

long long Bruno(std::vector<int> u) {
   return Bruno_solver::Bruno(u);
}
#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...