Submission #233684

#TimeUsernameProblemLanguageResultExecution timeMemory
233684AlexLuchianovMinerals (JOI19_minerals)C++14
75 / 100
50 ms4120 KiB
#include "minerals.h"
#include <vector>
#include <random>
#include <algorithm>
#include <iostream>

using namespace std;

int const nmax = 43000;
int ord[1 + 2 * nmax];
vector<int> basic, spec;
int start[1 + nmax], bonus[1 + nmax];
int active[1 + 2 * nmax];
int sol[1 + nmax];

vector<int> g[1 + nmax];

int last = 0;

int query(int pos){
  int curr = Query(pos);
  active[pos] ^= 1;
  if(last == curr)
    return 0;
  else {
    last = curr;
    return 1;
  }
}


void Solve(int n) {
  for(int i = 1; i <= 2 * n; i++)
    ord[i] = i;
  mt19937 rng;
  shuffle(ord + 1, ord + 2 * n + 1, rng);

  int last = 0;

  for(int i = 1; i <= 2 * n; i++){
    if(query(ord[i]) == 1) {
      active[ord[i]] = 1;
      basic.push_back(ord[i]);
    } else{
      ++last;
      spec.push_back(ord[i]);
      start[spec.size() - 1] = 0 ;
      bonus[spec.size() - 1] = basic.size() - 1;
    }
  }
  for(int i = 0; i < n; i++)
    sol[i] = 0;

  int result = 2 * n;

  for(int bit = 15; 0 <= bit; bit--){
    for(int i = 0; i < n; i++)
      if(0 < ((1 << bit) & i))
        query(basic[i]);
    for(int j = 0; j < n; j++)
      if(sol[j] != query(spec[j])){
        sol[j] ^= 1;
        start[j] += (1 << bit);
      }
  }

  for(int i = 0; i < spec.size(); i++)
    Answer(spec[i], basic[start[i]]);
}

Compilation message (stderr)

minerals.cpp: In function 'void Solve(int)':
minerals.cpp:67:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < spec.size(); i++)
                  ~~^~~~~~~~~~~~~
minerals.cpp:54:7: warning: unused variable 'result' [-Wunused-variable]
   int result = 2 * n;
       ^~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...