Submission #1314144

#TimeUsernameProblemLanguageResultExecution timeMemory
1314144amloxgMinerals (JOI19_minerals)C++20
80 / 100
21 ms2768 KiB
#include "minerals.h"
#include <vector>
#include <iostream>

using namespace std;

int same_num = 0;

void subSolve(vector<int>& X, vector<int>& Y, bool is_X){
    if (X.size() <= 1) Answer(X[0], Y[0]);
    else{
        vector<int> new_X1, new_Y1, new_X2, new_Y2;
        for (int i = 0; i < X.size()/2; ++i) new_X1.push_back(X[i]);
        for (int i = X.size()/2; i < X.size(); ++i) new_X2.push_back(X[i]);
        if (is_X) for (auto x2 : new_X2) same_num = Query(x2);
        else for (auto x1 : new_X1) same_num = Query(x1);

        for (auto y : Y){
            int query = Query(y);
            if (query == same_num) new_Y1.push_back(y);
            else{
                new_Y2.push_back(y);
                same_num = query;
            }
        }
        subSolve(new_X1, new_Y1, true);
        subSolve(new_X2, new_Y2, false);
    }
}

void Solve(int N){
    vector<int> X, Y;
    for (int i = 1; i <= 2*N; ++i)
        if (Query(i) != same_num){
            X.push_back(i);
            ++same_num;
        }
        else Y.push_back(i);
    subSolve(X, Y, true);
}
#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...