Submission #1327885

#TimeUsernameProblemLanguageResultExecution timeMemory
1327885QuocSenseiUnscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms568 KiB
#include <bits/stdc++.h>

#define ll long long 
#define el cout << '\n'

using namespace std;

void add_element(string x);
void compile_set();
bool check_element(string x);

namespace SUBTASK_12
{
    vector<int> solve(int n, int w, int r)
    {
        vector<int> ans(n, 0);
        string s = "";
        for (int _ = 1; _ <= n; _++)
            s += '0';
        for (int i = 0; i < n; i++)
        {
            s[i] = '1';
            add_element(s);
        }
        compile_set();
        s = "";
        for (int _ = 1; _ <= n; _++)
            s += '0';
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (s[j] == '1')
                    continue;
                s[j] = '1';
                if (check_element(s))
                {
                    ans[j] = i;
                    break;
                }
                s[j] = '0';
            }
        }
        return ans;
    }
    bool check_sub(int n, int w, int r)
    {
        return 0;
        return w >= n && r >= n * n;
    }
};
namespace SUBTASK_3
{
    vector<int> ans;
    void gen(int n, int l, int r)
    {
        if (l == r)
            return ;
        int m = l + r >> 1;
        string s = "";
        for (int i = 0; i < n; i++)
            if (i < l || i > r)
                s += '1';
            else
                s += '0';
        for (int i = l; i <= m; i++)
        {
            s[i] = '1';
            add_element(s);
            s[i] = '0';
        }
        gen(n, l, m);
        gen(n, m + 1, r);
    };
    void decode(int n, int l, int r, vector<int> A)
    {
        if (l == r)
            return ans[A.back()] = l, void();
        int m = l + r >> 1;
        string s = "";
        for (int _ = 1; _ <= n; _++)
            s += '1';
        for (int x : A)
            s[x] = '0';
        vector<int> L, R;
        for (int x : A)
        {
            s[x] = '1';
            if (check_element(s))
                L.push_back(x);
            else
                R.push_back(x);
            s[x] = '0';
        }
        decode(n, l, m, L);
        decode(n, m + 1, r, R);
    }
    vector<int> solve(int n, int w, int r)
    {
        vector<int> A;
        for (int i = 0; i < n; i++)
            A.push_back(i);
        ans.assign(n, 0);
        gen(n, 0, n - 1);
        compile_set();
        decode(n, 0, n - 1, A);
        return ans;
    }
};

vector<int> restore_permutation(int N, int W, int R)
{
    if (SUBTASK_12::check_sub(N, W, R))
        return SUBTASK_12::solve(N, W, R);
    return SUBTASK_3::solve(N, W, R);
}

Compilation message (stderr)

messy.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
messy_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...