Submission #1262304

#TimeUsernameProblemLanguageResultExecution timeMemory
1262304miniobBroken Device (JOI17_broken_device)C++20
0 / 100
50 ms1384 KiB
#include "Annalib.h"
#include <bits/stdc++.h>
using namespace std;

long long los[157];
long long bity[60];     
bitset<150> dosta[60];  
long long ktory[157];
bool czyb[157];
int ileju = 0;         
mt19937 rng(2137);

void add(long long x)
 {              
    bitset<150> mojamaska;
    mojamaska[ileju] = 1;
    ileju++;
    for (int i = 59; i >= 0; i--)
    {
      if ((x >> i) & 1) 
      {
          if (!bity[i])
          {
            bity[i] = x; 
            dosta[i] = mojamaska;
            return;
          }
          x ^= bity[i];
          mojamaska ^= dosta[i];
      }
    }
}


vector<long long> dajpod(long long x)  
{
    bitset<150> curmaska = 0;
    for (long long i = 59; i >= 0; i--) 
    {
      if ((x >> i) & 1) 
      {
          if (!bity[i])
          {
            return {};   
          }       
          x ^= bity[i]; 
          curmaska ^= dosta[i];
      }
    }
    vector<long long> odp;
    for (long long i = 0; i < ileju; i++)
    {
      if (curmaska[i] & (long long)1)
      {
        odp.push_back(i);
      }
    }
    return odp;                         
}

long long gen6()
{
  return ((long long)rng() << (long long)32) + (long long)rng();
}

void Anna( int N, long long X, int K, int P[] ){
  set<long long> nie;
  ileju = 0;
  for(int i = 0; i < 60; i++)
  {
    bity[i] = false;
    dosta[i] = 0;
  }
  for(int i = 0; i < 150; i++)
  {
    czyb[i] = false;
  }
  for(long long i = 0; i < K; i++)
  {
    nie.insert(P[i]);
  }
  for(long long i = 0; i < 150; i++)
  {
    los[i] = gen6() % (long long)(1100000000000000001);
    if(nie.find(i) == nie.end())
    {
      ktory[ileju] = i;
      add(los[i]);
    }
  }
  vector<long long> git = dajpod(X);
  for(auto x : git)
  {
    czyb[ktory[x]] = 1;
  }
  for(long long i = 0; i < 150; i++)
  {
    if(czyb)
    {
      Set(i, 1);
    }
    else
    {
      Set(i, 0);
    }
  }
}
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;

long long los[157];
mt19937 rng(2137);

long long gen6()
{
  return ((long long)rng() << (long long)32) + (long long)rng();
}

long long Bruno( int N, int A[] ){
  mt19937_64  rng(N);
  long long odp = 0;
  for(int i = 0; i < 150; i++)
  {
    los[i] = gen6() % (long long)(1100000000000000001);
  }
  for(int i = 0; i < N; i++)
  {
    if(A[i])
    {
      odp ^= los[i];
    }
  }
  return odp;
}
#Verdict Execution timeMemoryGrader output
Fetching results...