제출 #1295741

#제출 시각아이디문제언어결과실행 시간메모리
1295741goulthenUnscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
2 ms612 KiB
#include <bits/stdc++.h>
#include "messy.h"
using namespace std;

#define rep(i,a,b) for(int i = a; i <= b; i++)
#define pb push_back
vector<int> p;

void da(int l, int r, string base, int n) {
    if(l==r) return;

    int mid = (l+r)/2;
    string cp = base, cp2 = base;

    rep(i,l,mid) {
        base[i] = '1';
        cp[i] = '1';
        add_element(base);
        base[i] = '0';
    }
    rep(i,mid+1,r) cp2[i] = '1';

    da(l,mid,cp2,n);
    da(mid+1,r,cp,n);
}

void dc(int l, int r, vector<int> mb, string base, int n) {
    if(l==r) {
        p[mb[0]] = l;
        return;
    }

    int mid = (l+r)/2;
    string cp = base, cp2 = base;

    vector<int> nmb[2];
    for(int &i : mb) {
        base[i] = '1';
        if(check_element(base)) {
            nmb[0].pb(i);
            cp[i] = '1';
        }
        else {
            nmb[1].pb(i);
            cp2[i] = '1';
        }
        base[i] = '0';
    }

    dc(l,mid,nmb[0],cp2,n);
    dc(mid+1,r,nmb[1],cp,n);
}
// all my homies love divide and conquer

vector<int> restore_permutation(int n, int w, int r) {
    // só colocar umas string mt fodas ai
    p.resize(n,0);
    vector<int> evr;
    string base = "";
    rep(i,0,n-1) {
        base+='0';
        evr.pb(i);
    }

    da(0,n-1,base, n);
    compile_set();

    rep(i,0,n-1) base[i] = '0';
    dc(0,n-1,evr,base, n);


    return p;
}

컴파일 시 표준 에러 (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...