Submission #1148714

#TimeUsernameProblemLanguageResultExecution timeMemory
1148714yeysoMinerals (JOI19_minerals)C++20
25 / 100
8 ms1716 KiB
#include "minerals.h"
#include <bits/stdc++.h>
using namespace std;
void Solve(int N) {
  int a = 0;
  int b = 0;
    //vector<vector<int>> res(2 * N + 1, vector<int>(15, 0));
    vector<int> arr(2 * N + 1, 0);
    vector<int> res(2 * N + 1, 1);
    for(int k = 0; k <= 14; k ++){
      for(int i = 0; i <= 2 * N; i ++){
        if(k > 0){
              if(i & (1 << k)){
                  if(i & (1 << (k - 1))){} else {
                    a = Query(i);
                    arr[i] ^= 1;
                  }
              } else {
                if(i & (1 << (k - 1))){
                    a = Query(i);
                    arr[i] ^= 1;
                }
              }
        } else {
          if(i & (1 << 0)){
              a = Query(i);
              arr[i] ^= 1;
          }
        }
          
          //if(not i & (1 << k) and i & (1 << (k - 1))){
            //  a = Query(i);
          //}
      }
      for(int i = 1; i <= N; i ++){
        //cout << arr[i];
          b = Query(i);
          if(a == b){
              // Then b is paired with something where the kth bit is 1
              //res[a][k] = 1;
              
              res[i] += (1 << k);
          }
          b = Query(i);
      }
      //cout << "\n";
      /*for(int i = 1; i <= 2 * N; i ++){
        if(i & (1 << k)){
          //a = Query(i);
            //arr[i] ^= 1;
        }
      }*/
    }
    /*


    N queries to set up
    2N queries for each one
    N queries to remove
    Repeat all log(n) times

    N / 2 queries to set up
    4N queries for each one
    Repeat log(n) times
    = 4N * 15

    */
    set<pair<int, int>> ans;
    for(int i = 0; i < res.size() / 2 + 1; i ++){
        ans.insert({min(i , res[i] -1), max(i , res[i] - 1)});
        //Answer(i, res[i]);
    }
    for(auto itx = ++ans.begin(); itx != ans.end(); ++itx){
        Answer((*itx).first, (*itx).second);
        //cout << (*itx).first << " " << (*itx).second << "\n";
    }


}

/*
g++ -std=gnu++17 -O2 -Wall -pipe -static -o minerals grader.cpp minerals.cpp
4
1 5
2 6
3 7
4 8



*/
#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...