Submission #940790

#TimeUsernameProblemLanguageResultExecution timeMemory
940790snpmrnhlolMechanical Doll (IOI18_doll)C++17
37 / 100
99 ms12240 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
void create_circuit(int m, vector<int> a) {
    int n = a.size();
    int len = 0;
    int cnt = -2;
    while((1<<len) < n + 1)len++;
    vector <int> c(m + 1);
    vector <int> x((1<<len) - 1);
    vector <int> y((1<<len) - 1);
    vector <array<int,3>> ord;
    for(int i = 0;i < m + 1;i++){
        c[i] = -1;
    }
    auto dfs = [&](auto self,int node,int d) -> void {
        if(d == len - 1){
            x[-node - 1] = -1;
            y[-node - 1] = -1;
        }else{
            x[-node - 1] = cnt--;
            self(self,cnt + 1,d + 1);
            y[-node - 1] = cnt--;
            self(self,cnt + 1,d + 1);
        }
    };
    int cnt2 = 0,last = 0;
    auto dfs2 = [&](auto self,int node,int d) -> void {
        if(d == len - 1){
            int nr = 0;
            for(int j = 0;j < len;j++){
                if(cnt2>>j&1){
                    nr|=(1<<(len - j - 1));
                }
            }
            if(cnt2 < n)ord.push_back({nr,node,0});
            cnt2++;
            if(cnt2 < n)ord.push_back({nr + (1<<len),node,1});
            cnt2++;
            last = node;
        }else{
            self(self,-x[node] - 1,d + 1);
            self(self,-y[node] - 1,d + 1);
        }
    };
    dfs(dfs,-1,0);
    dfs2(dfs2,0,0);
    int cnt3 = 0;
    sort(ord.begin(),ord.end());
    for(auto i:ord){
        //cout<<i[0]<<' '<<i[1]<<' '<<i[2]<<'\n';
        if(i[2] == 0){
            x[i[1]] = a[cnt3];
        }else{
            y[i[1]] = a[cnt3];
        }
        cnt3++;
    }
    y[last] = 0;
    /*for(int i = 0;i < (1<<len) - 1;i++){
        cout<<x[i]<<' '<<y[i]<<'\n';
    }*/
    return answer(c,x,y);
}
/**
5 4
1 2 3 1
**/
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...