Submission #347774

# Submission time Handle Problem Language Result Execution time Memory
347774 2021-01-13T11:39:30 Z jamezzz Unscrambling a Messy Bug (IOI16_messy) C++14
100 / 100
3 ms 492 KB
#include <bits/stdc++.h>
using namespace std;
#include "messy.h"

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

typedef tree<long long, null_type, less<long long>,
rb_tree_tag, tree_order_statistics_node_update> pbds;
//less_equal for identical elements

#define fi first
#define se second
#define pb emplace_back
#define ll long long
#define INF 1023456789
#define INFll 1023456789123456789
#define all(x) x.begin(), x.end()
typedef pair<int, int> ii;
typedef tuple<int, int, int> iii;
typedef tuple<int, int, int, int> iiii;

vector<int> ans;
vector<int> s[135];
char st[7];

void add(int n, int l, int r, vector<int> v){
    if (l == r - 1) return;
    int m = (l + r) / 2;
    for (int i = l; i < m; ++i){
        string s;
        s.append(n, '0');
        s[i] = '1';
        for (int x: v) s[x] = '1';
        add_element(s);
    }
    {
        vector<int> t = v;
        for (int i = l; i < m; ++i) t.pb(i);
        add(n, m, r, t);
    }
    {
        vector<int> t = v;
        for (int i = m; i < r; ++i) t.pb(i);
        add(n, l, m, t);
    }
}

void solve(int n, int l, int r, vector<int> c, vector<int> tr, vector<int> id){
    if (l == r - 1){
        ans[c[0]] = l; return;
    }
    vector<int> lc, rc;
    for (int x: c){
        string s;
        s.append(n, '0');
        for (int i: id) s[i] = '1';
        s[x] = '1';
        if (check_element(s)) lc.pb(x);
        else rc.pb(x);
    }
    int m = (l + r) / 2;
    {
        vector<int> t = tr;
        vector<int> tid = id;
        for (int i: lc) tid.pb(i);
        for (int i = l; i < m; ++i) t.pb(i);
        solve(n, m, r, rc, t, tid);
    }
    {
        vector<int> t = tr;
        vector<int> tid = id;
        for (int i: rc) tid.pb(i);
        for (int i = m; i < r; ++i) t.pb(i);
        solve(n, l, m, lc, t, tid);
    }
}


std::vector<int> restore_permutation(int n, int w, int r) {
    add(n, 0, n, vector<int>());
    compile_set();
    ans.resize(n);
    vector<int> v;
    for (int i = 0; i < n; ++i) v.pb(i);
    solve(n, 0, n, v, vector<int>(), vector<int>());
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 8
2 Correct 1 ms 364 KB n = 8
3 Correct 1 ms 364 KB n = 8
4 Correct 1 ms 364 KB n = 8
5 Correct 1 ms 364 KB n = 8
6 Correct 1 ms 364 KB n = 8
7 Correct 1 ms 384 KB n = 8
8 Correct 1 ms 384 KB n = 8
9 Correct 1 ms 364 KB n = 8
10 Correct 1 ms 364 KB n = 8
11 Correct 1 ms 364 KB n = 8
12 Correct 1 ms 364 KB n = 8
13 Correct 1 ms 364 KB n = 8
14 Correct 1 ms 364 KB n = 8
15 Correct 1 ms 364 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB n = 32
2 Correct 1 ms 364 KB n = 32
3 Correct 1 ms 364 KB n = 32
4 Correct 1 ms 364 KB n = 32
5 Correct 1 ms 364 KB n = 32
6 Correct 1 ms 364 KB n = 32
7 Correct 1 ms 364 KB n = 32
8 Correct 1 ms 364 KB n = 32
9 Correct 1 ms 364 KB n = 32
10 Correct 1 ms 364 KB n = 32
11 Correct 1 ms 384 KB n = 32
12 Correct 1 ms 364 KB n = 32
13 Correct 1 ms 364 KB n = 32
14 Correct 1 ms 364 KB n = 32
15 Correct 1 ms 384 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 32
2 Correct 1 ms 364 KB n = 32
3 Correct 1 ms 364 KB n = 32
4 Correct 1 ms 364 KB n = 32
5 Correct 1 ms 364 KB n = 32
6 Correct 1 ms 364 KB n = 32
7 Correct 1 ms 364 KB n = 32
8 Correct 1 ms 364 KB n = 32
9 Correct 1 ms 364 KB n = 32
10 Correct 1 ms 364 KB n = 32
11 Correct 1 ms 364 KB n = 32
12 Correct 1 ms 364 KB n = 32
13 Correct 1 ms 364 KB n = 32
14 Correct 1 ms 364 KB n = 32
15 Correct 1 ms 364 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 3 ms 492 KB n = 128
2 Correct 3 ms 492 KB n = 128
3 Correct 2 ms 492 KB n = 128
4 Correct 2 ms 492 KB n = 128
5 Correct 2 ms 492 KB n = 128
6 Correct 2 ms 492 KB n = 128
7 Correct 3 ms 492 KB n = 128
8 Correct 2 ms 492 KB n = 128
9 Correct 3 ms 492 KB n = 128
10 Correct 2 ms 492 KB n = 128
11 Correct 2 ms 492 KB n = 128
12 Correct 2 ms 492 KB n = 128
13 Correct 2 ms 492 KB n = 128
14 Correct 3 ms 492 KB n = 128
15 Correct 3 ms 492 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 2 ms 492 KB n = 128
2 Correct 3 ms 492 KB n = 128
3 Correct 2 ms 492 KB n = 128
4 Correct 3 ms 492 KB n = 128
5 Correct 2 ms 492 KB n = 128
6 Correct 2 ms 492 KB n = 128
7 Correct 2 ms 492 KB n = 128
8 Correct 2 ms 492 KB n = 128
9 Correct 2 ms 492 KB n = 128
10 Correct 2 ms 492 KB n = 128
11 Correct 2 ms 492 KB n = 128
12 Correct 2 ms 492 KB n = 128
13 Correct 2 ms 492 KB n = 128
14 Correct 2 ms 492 KB n = 128
15 Correct 2 ms 492 KB n = 128