Submission #417495

#TimeUsernameProblemLanguageResultExecution timeMemory
417495iulia2100Minerals (JOI19_minerals)C++14
40 / 100
32 ms3652 KiB
#include <iostream>
#include <vector>
#include "minerals.h"

using namespace std;

//ifstream cin ("idk.in");
//ofstream cout ("idk.out");

const int N = 96005;

int last_ans;
int q[N];
bool in_set[N];

vector <int> st, dr;

void solve(vector <int> v)  {
    if (v.size() == 2)  {
        Answer(v[0], v[1]);
        return;
    }
//    cout << v.size() << '\n';
    vector <int> aux_st, aux_dr;
    int nr = v.size() / 4, x = 0;
    for (auto it : v)   {
        if (x == nr && in_set[it])    {
            aux_dr.push_back(it);
        } else if (in_set[it]) {
            x = Query(it);
            q[it] ^= 1;
            aux_st.push_back(it);
        }
    }
    for (auto it : v)   {
        if (in_set[it])
            continue;
        if (aux_st.size() == nr + nr)   {
            aux_dr.push_back(it);
            continue;
        }
        if (aux_dr.size() == v.size() - nr - nr)    {
            aux_st.push_back(it);
            continue;
        }
        x = Query(it);
        q[it] ^= 1;
        if (x > nr) {
            x = Query(it);
            q[it] ^= 1;
            aux_dr.push_back(it);
        } else aux_st.push_back(it);
    }
    for (auto it : aux_st)  {
        if (q[it])  {
            Query(it);
            q[it] ^= 1;
        }
    }
    solve(aux_st);
    solve(aux_dr);
}

void find_index(int n)   {
    int last = 0;
    for (int i = 1; i <= n + n; ++i)    {
        int x = Query(i);
        last_ans = x;
        if (x == last)  {
            last_ans = Query(i);
            continue;
        }
        in_set[i] = true;
        last = x;
    }
    for (int i = 1; i <= n + n; ++i)    {
        if (!in_set[i]) {
            dr.push_back(i);
        } else    {
            st.push_back(i);
            Query(i);
        }
    }
}

void Solve(int n)   {
    find_index(n);
    vector <int> aux(0);
    for (int i = 1; i <= n + n; ++i)
        aux.push_back(i);
    solve(aux);
}

Compilation message (stderr)

minerals.cpp: In function 'void solve(std::vector<int>)':
minerals.cpp:38:27: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   38 |         if (aux_st.size() == nr + nr)   {
      |             ~~~~~~~~~~~~~~^~~~~~~~~~
#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...