Submission #1245220

#TimeUsernameProblemLanguageResultExecution timeMemory
1245220PlayVoltzHack (APIO25_hack)C++20
100 / 100
66 ms1908 KiB
#include "hack.h"
#include <vector>

using namespace std;
using ll = long long;

const int SKIP = 27380;
const int MAX_N = 1e9;

bool bip_query(vector<ll> A, vector<ll> B){
  vector<ll> C = A;
  C.insert(C.end(), B.begin(), B.end());
  ll total = collisions(C);

  if (total == 0) return 0;
  return true;
}

vector<int> prime_factor(int x){
  vector<int> out;

  int test = 2;
  while (test * test <= x){
    if (x % test == 0){
      out.push_back(test);
      x /= test;
    } else {
      test += 1;
    }
  }

  if (x > 1) out.push_back(x);

  return out;
}

int hack() {
    vector<ll> A, B;

    for(int i = 1; i <= SKIP; i++){
        A.push_back(i);
    }

    for(int i = SKIP * (MAX_N / 2 / SKIP); i <= MAX_N + SKIP; i += SKIP){
        B.push_back(i);
    }

    while((int) A.size() > 1 || (int) B.size() > 1) {
        if(A.size() < B.size())swap(A, B);
            vector<ll> Al;
            vector<ll> Ar;

            int sz_a = A.size();
            for(int i = 0; i < sz_a / 2; i++){
                Al.push_back(A[i]);
            }
            
            for(int i = sz_a / 2; i < sz_a; i++){
                Ar.push_back(A[i]);
            }

            if(bip_query(Ar, B)){
                A = Ar;
            } else {
                A = Al;
            }
        
    }

    int xl = A[0];
    int xr = B[0];

    int diff = abs(xr - xl);

    for (auto p : prime_factor(diff)) {
        diff /= p;
        if (collisions({1, diff + 1}) == 0){
            diff *= p;
        }
    }

    return diff;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...