Submission #1067204

#TimeUsernameProblemLanguageResultExecution timeMemory
1067204andrei_iorgulescuUnscrambling a Messy Bug (IOI16_messy)C++14
100 / 100
3 ms856 KiB
#include <bits/stdc++.h>
#include "messy.h"
#warning That's not FB, that's my FB

using namespace std;

int N;

string make_query(vector<int> where_1)
{
    string lol;
    for (int i = 0; i < N; i++)
        lol.push_back('0');
    for (auto it : where_1)
        lol[it] = '1';
    return lol;
}

vector<int> restore_permutation(int n, int w, int r)
{
    N = n;
    int k = __lg(n);
    int pas = 0;
    for (int iter = 2; iter <= n; iter *= 2)
    {
        pas++;
        if (iter == 2)
        {
            for (int i = 0; i < (1 << (k - 1)); i++)
            {
                vector<int> where_1 = {i};
                string tq = make_query(where_1);
                //cout << tq << endl;
                add_element(tq);
            }
        }
        else
        {
            for (int i = 0; i < n; i += (1 << (k + 1 - pas)))
            {
                vector<int> where_1;
                for (int j = i + (1 << (k - pas + 1)); j < i + (1 << (k + 1 - pas)) + (1 << (k - pas + 1)); j++)
                    where_1.push_back(j % n);
                for (int j = i; j < i + (1 << (k - pas)); j++)
                {
                    where_1.push_back(j);
                    string tq = make_query(where_1);
                    //cout << tq << endl;
                    add_element(tq);
                    where_1.pop_back();
                }
            }
        }
    }
    compile_set();
    vector<vector<int>> seturi;
    seturi.push_back({});
    for (int i = 0; i < n; i++)
        seturi[0].push_back(i);
    pas = 0;
    for (int iter = 2; iter <= n; iter *= 2)
    {
        pas++;
        vector<vector<int>> new_seturi;
        if (iter == 2)
        {
            vector<int> v0, v1;
            for (int i = 0; i < n; i++)
            {
                vector<int> where_1 = {i};
                string tq = make_query(where_1);
                bool bb = check_element(tq);
                if (bb)
                    v0.push_back(i);
                else
                    v1.push_back(i);
            }
            new_seturi.push_back(v0);
            new_seturi.push_back(v1);
        }
        else
        {
            for (int i = 0; i < seturi.size(); i++)
            {
                vector<int> v0, v1;
                for (auto it : seturi[i])
                {
                    vector<int> where_1 = {it};
                    for (auto itt : seturi[(i + 1) % (int)seturi.size()])
                        where_1.push_back(itt);
                    string tq = make_query(where_1);
                    //cout << tq << endl;
                    bool bb = check_element(tq);
                    if (bb)
                        v0.push_back(it);
                    else
                        v1.push_back(it);
                }
                new_seturi.push_back(v0);
                new_seturi.push_back(v1);
            }
        }
        seturi = new_seturi;
    }
    vector<int> pos(n), p(n);
    for (int i = 0; i < n; i++)
        pos[i] = seturi[i][0], p[pos[i]] = i;
    return p;
}

Compilation message (stderr)

messy.cpp:3:2: warning: #warning That's not FB, that's my FB [-Wcpp]
    3 | #warning That's not FB, that's my FB
      |  ^~~~~~~
messy.cpp: In function 'std::vector<int> restore_permutation(int, int, int)':
messy.cpp:83:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   83 |             for (int i = 0; i < seturi.size(); i++)
      |                             ~~^~~~~~~~~~~~~~~
#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...