Submission #1314170

#TimeUsernameProblemLanguageResultExecution timeMemory
1314170cleimekMinerals (JOI19_minerals)C++20
80 / 100
21 ms2784 KiB
#include <bits/stdc++.h>
#include "minerals.h"
using namespace std;

int distinct=0;

void GetAns(vector<int>& X, vector<int>& Y, bool is_X){ //state 0

    if(X.size()==1){
        Answer(X[0],Y[0]);
        return;
    }

    vector<int> new_leftX, new_rightX;
    vector<int> new_leftY, new_rightY;
    //half
    int middleX = X.size()/2;
    for(int i=0; i<middleX; ++i) new_leftX.push_back(X[i]);
    for(int i=middleX; i<X.size(); ++i) new_rightX.push_back(X[i]);
    
    if (is_X){
        for (int i = middleX; i<X.size(); ++i) distinct = Query(X[i]);
    }
    else{
        for(int i=0; i<middleX; ++i) distinct = Query(X[i]);
    }

    for(int i=0; i<Y.size(); ++i){
        int curr = Query(Y[i]);
        if(curr == distinct){
            new_leftY.push_back(Y[i]);
        }
        else{
            new_rightY.push_back(Y[i]);
        }
        distinct = curr;
    }

    GetAns(new_leftX, new_leftY, true);
    GetAns(new_rightX, new_rightY, false);
}

void Solve(int n){
    //second level
    vector<int> lockSet, keySet;
    for(int i=1; i<=2*n; ++i){
        if(Query(i)==distinct) keySet.push_back(i);
        else{
            distinct++;
            lockSet.push_back(i);
        }
    }
    GetAns(lockSet, keySet, 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...