제출 #940726

#제출 시각아이디문제언어결과실행 시간메모리
940726snpmrnhlolMechanical Doll (IOI18_doll)C++17
37 / 100
71 ms10048 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;
    while((1<<len) < n + 1)len++;
    vector <int> c(m + 1);
    vector <int> x((1<<len) - 1);
    vector <int> y((1<<len) - 1);
    for(int i = 0;i < m + 1;i++){
        c[i] = -1;
    }
    for(int i = 1;i < (1<<(len - 1));i++){
        x[i - 1] = -(i*2);
        y[i - 1] = -(i*2 + 1);
    }
    for(int i = (1<<(len - 1));i < (1<<len);i++){
        int ord1 = 0,ord2 = 0;
        int nr = i - (1<<(len - 1));
        for(int j = 0;j < len - 1;j++){
            if(nr>>j&1){
                ord1|=(1<<(len - j - 2));
            }
        }
        ord2 = ord1 + (1<<(len - 1));
        if(ord1 < n){
            x[i - 1] = a[ord1];
        }else{
            if(ord1 == (1<<len) - 1){
                x[i - 1] = 0;
            }else{
                x[i - 1] = -1;
            }
        }
        if(ord2 < n){
            y[i - 1] = a[ord2];
        }else{
            if(ord2 == (1<<len) - 1){
                y[i - 1] = 0;
            }else{
                y[i - 1] = -1;
            }
        }
        //cout<<i<<' '<<ord1<<' '<<ord2<<'\n';
    }
    return answer(c,x,y);
}
/**
3 4
1 1 2 3
**/
#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...