제출 #1138078

#제출 시각아이디문제언어결과실행 시간메모리
1138078huutuanBroken Device 2 (JOI22_device2)C++20
0 / 100
392 ms493768 KiB
#include "Anna.h"
#include <utility>
#include <vector>

#include <bits/stdc++.h>

using namespace std;

namespace Anna_solver{
   const int M=200;
   int Declare(){
      return M;
   }
   mt19937 rng(69420);
   pair<vector<int>, vector<int>> Anna(long long A){
      long long val=uniform_int_distribution<long long>(0, (1ll<<60)-1)(rng);
      // long long val=0;
      A^=val;
      vector<int> v;
      for (int i=0; i<60; ++i){
         v.push_back(i&1);
         v.push_back(i&1);
         if (A>>i&1){
            v.push_back(i&1);
            v.push_back(i&1);
         }
      }
      vector<int> vv;
      for (int i=0; i<(int)v.size(); ++i) vv.push_back(i&1);
      return {v, vv};
   }
}

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=200;
   mt19937 rng(69420);
   long long f[M*2+10][61][M+10][2][6];
   int n;
   void transition(long long &x, long long y){
      // assert(x==-1 || x==y);
      x=y;
   }
   long long Bruno(vector<int> v){
      n=v.size();
      long long val=uniform_int_distribution<long long>(0, (1ll<<60)-1)(rng);
      // long long val=0;
      long long ans=0;
      memset(f, -1, sizeof f);
      f[0][0][0][0][0]=0;
      for (int i=0; i<n; ++i){
         for (int b=0; b<=60; ++b){
            for (int c=0; c<=n/2; ++c){
               for (int k=0; k<2; ++k) for (int l=0; l<6; ++l) if (f[i][b][c][k][l]!=-1){
                  if (c<n/2 && v[i]==(c&1)){
                     transition(f[i+1][b][c+1][k][l], f[i][b][c][k][l]);
                  }
                  if (v[i]==k && l<5){
                     transition(f[i+1][b][c][k][l+1], f[i][b][c][k][l]);
                     if (l&1 && b<60){
                        transition(f[i+1][b+1][c][k^1][0], f[i][b][c][k][l]|(l==3?1ll<<b:0ll));
                     }
                  }
               }
            }
         }
      }
      ans=f[n][60][n/2][0][0];
      assert(ans!=-1);
      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...