제출 #1354686

#제출 시각아이디문제언어결과실행 시간메모리
1354686yogesh_sane자동 인형 (IOI18_doll)C++20
0 / 100
0 ms344 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

void create_circuit(int M, vector<int> A) {
    int N = A.size();
    int K = 16; 
    
    vector<int> C(M + 1);
    C[0] = A[0];  // Start: Origin -> Trigger 1
    C[1] = -1;    // Trigger 1 -> Root Switch

    int num_switches = K - 1;
    vector<int> X(num_switches), Y(num_switches);

    // 1. Build the tree structure
    for (int i = 1; i < K / 2; i++) {
        X[i-1] = -(2 * i);
        Y[i-1] = -(2 * i + 1);
    }

    // 2. Dry Run to find leaf visit order
    vector<int> state(num_switches, 0);
    vector<int*> leaf_slots;

    for (int i = 0; i < K; i++) {
        int curr = 1;
        while (true) {
            int sw_idx = curr - 1;
            if (state[sw_idx] == 0) {
                state[sw_idx] = 1;
                if (curr >= K / 2) {
                    leaf_slots.push_back(&X[sw_idx]);
                    break;
                }
                curr = 2 * curr;
            } else {
                state[sw_idx] = 0;
                if (curr >= K / 2) {
                    leaf_slots.push_back(&Y[sw_idx]);
                    break;
                }
                curr = 2 * curr + 1;
            }
        }
    }

    // 3. Map leaves
    // We need the ball to hit Trigger 1 N-1 more times (since C[0] already hit it once)
    // Then we need it to go to Origin (0).
    // Then we need to reset the switches.
    
    // For N=16, we need 15 more hits to trigger 1, then 1 hit to Origin.
    // Total visits to tree = 16 (exactly K).
    for (int i = 0; i < K; i++) {
        if (i < N - 1) {
            *(leaf_slots[i]) = 1; // Go back to Trigger 1
        } else {
            *(leaf_slots[i]) = 0; // Final visit: Go to Origin
        }
    }

    answer(C, X, Y);
}
#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...