Submission #556237

# Submission time Handle Problem Language Result Execution time Memory
556237 2022-05-02T15:39:52 Z urosk Unscrambling a Messy Bug (IOI16_messy) C++14
100 / 100
2 ms 468 KB
#include "messy.h"
#define here cerr<<"===========================================\n"
#include <bits/stdc++.h>
#define ld double
#define ll long long
#define ull unsigned long long
#define llinf 100000000000000000LL // 10^17
#define iinf 2000000000 // 2*10^9
#define pb push_back
#define popb pop_back
#define fi first
#define sc second
#define endl '\n'
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define sz(a) int(a.size())
#define all(a) a.begin(),a.end()
#define ceri(a,l,r) {for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;}
using namespace std;
#define maxn 205
int n;
vector<int> p;
vector<int> ans;
void add(int l,int r){
    if(l==r) return;
    //cerr<<l<< " "<<r<<endl;
    string s(n,'0');
    int mid = (l+r)/2;
    for(int i = 0;i<l;i++) s[i] = '1';
    for(int i = r+1;i<n;i++) s[i] = '1';
    for(int i = l;i<=mid;i++){
        s[i] = '1';
        add_element(s);
        //cerr<<s<<endl;
        s[i] = '0';
    }
    add(l,mid);
    add(mid+1,r);
}
void reshi(int l,int r){
    if(r==l) return;
    string s(n,'0');
    int mid = (l+r)/2;
    for(int i = 0;i<l;i++) s[p[i]] = '1';
    for(int i = r+1;i<n;i++) s[p[i]] = '1';
    vector<int> ls,rs;
    //here;
    for(int i = l;i<=r;i++){
        s[p[i]] = '1';
        bool ima = check_element(s);
        //cerr<<s<< " "<<ima<<endl;
        if(ima) ls.pb(p[i]);
        else rs.pb(p[i]);
        s[p[i]] = '0';
    }
    for(int i = l;i<=mid;i++) p[i] = ls[i-l];
    for(int i = mid+1;i<=r;i++) p[i] = rs[i-mid-1];
    /*
    cerr<<l<< " "<<r<<endl;
    for(ll x : ls) cerr<<x<< " ";
    cerr<<endl;
    for(ll x : rs) cerr<<x<< " ";
    cerr<<endl;
    */
    reshi(l,mid);
    reshi(mid+1,r);
}
vector<int> restore_permutation(int N, int w, int r) {
    n = N;
    p.resize(n);
    iota(all(p),0);
    add(0,n-1);
    compile_set();
    reshi(0,n-1);
    ans.resize(n);
    for(ll i = 0;i<n;i++) ans[p[i]] = i;
    return ans;
}
/*
4 16 16
2 1 3 0
*/
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 8
2 Correct 1 ms 212 KB n = 8
3 Correct 1 ms 212 KB n = 8
4 Correct 1 ms 212 KB n = 8
5 Correct 1 ms 212 KB n = 8
6 Correct 1 ms 300 KB n = 8
7 Correct 1 ms 212 KB n = 8
8 Correct 1 ms 212 KB n = 8
9 Correct 1 ms 212 KB n = 8
10 Correct 1 ms 212 KB n = 8
11 Correct 1 ms 212 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 32
2 Correct 1 ms 212 KB n = 32
3 Correct 1 ms 212 KB n = 32
4 Correct 1 ms 212 KB n = 32
5 Correct 1 ms 300 KB n = 32
6 Correct 0 ms 212 KB n = 32
7 Correct 1 ms 212 KB n = 32
8 Correct 1 ms 212 KB n = 32
9 Correct 1 ms 212 KB n = 32
10 Correct 1 ms 296 KB n = 32
11 Correct 1 ms 300 KB n = 32
12 Correct 1 ms 212 KB n = 32
13 Correct 1 ms 212 KB n = 32
14 Correct 1 ms 296 KB n = 32
15 Correct 1 ms 300 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 32
2 Correct 1 ms 212 KB n = 32
3 Correct 1 ms 212 KB n = 32
4 Correct 1 ms 316 KB n = 32
5 Correct 1 ms 212 KB n = 32
6 Correct 1 ms 212 KB n = 32
7 Correct 1 ms 212 KB n = 32
8 Correct 1 ms 212 KB n = 32
9 Correct 1 ms 212 KB n = 32
10 Correct 1 ms 212 KB n = 32
11 Correct 1 ms 212 KB n = 32
12 Correct 1 ms 212 KB n = 32
13 Correct 1 ms 212 KB n = 32
14 Correct 1 ms 212 KB n = 32
15 Correct 1 ms 212 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 2 ms 468 KB n = 128
2 Correct 1 ms 468 KB n = 128
3 Correct 2 ms 468 KB n = 128
4 Correct 1 ms 432 KB n = 128
5 Correct 2 ms 468 KB n = 128
6 Correct 2 ms 468 KB n = 128
7 Correct 1 ms 468 KB n = 128
8 Correct 1 ms 468 KB n = 128
9 Correct 1 ms 468 KB n = 128
10 Correct 2 ms 468 KB n = 128
11 Correct 2 ms 468 KB n = 128
12 Correct 2 ms 468 KB n = 128
13 Correct 2 ms 468 KB n = 128
14 Correct 1 ms 424 KB n = 128
15 Correct 2 ms 468 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 1 ms 468 KB n = 128
2 Correct 1 ms 424 KB n = 128
3 Correct 1 ms 468 KB n = 128
4 Correct 2 ms 468 KB n = 128
5 Correct 2 ms 468 KB n = 128
6 Correct 2 ms 468 KB n = 128
7 Correct 2 ms 468 KB n = 128
8 Correct 2 ms 468 KB n = 128
9 Correct 1 ms 468 KB n = 128
10 Correct 1 ms 468 KB n = 128
11 Correct 2 ms 424 KB n = 128
12 Correct 1 ms 468 KB n = 128
13 Correct 2 ms 416 KB n = 128
14 Correct 2 ms 468 KB n = 128
15 Correct 2 ms 468 KB n = 128