제출 #109440

#제출 시각아이디문제언어결과실행 시간메모리
109440nvmdava자동 인형 (IOI18_doll)C++17
100 / 100
173 ms11116 KiB
//#include "doll.h"
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
vector<int> C, X, Y, st;
int sz = 0;

void create_circuit(int M, std::vector<int> A);

void answer(std::vector<int> C, std::vector<int> X, std::vector<int> Y);

void solve(int id, int cnt, int dep){
    dep--;
    if(dep == 0){
        if(cnt == 1){
            X[-1-id] = -1;
            Y[-1-id] = 0;
        } else {
            X[-1-id] = 0;
            Y[-1-id] = 0;
        }
        return;
    }
    int l, r;
    r = min(1 << dep, cnt);
    l = cnt - r;
    X[-1-id] = -1;
    Y[-1-id] = -1;
    if(r){
        X.pb(0);
        Y.pb(0);
        st.pb(0);
        Y[-1-id] = --sz;
    }
    if(l){
        X.pb(0);
        Y.pb(0);
        st.pb(0);
        X[-1-id] = --sz;
    }
    if(r) solve(Y[-1-id], r, dep);
    if(l) solve(X[-1-id], l, dep);
}

void trav(int id, vector<int>& v, int t){
//    cerr<<id<<'\n';
    if(st[-1-id] == 0){
        st[-1-id] = 1;
        if(X[-1-id] == 0){
            X[-1-id] = v[t++];
            if(t == v.size()) return;
            trav(-1, v, t);
        } else
            trav(X[-1-id], v, t);
    } else {
        st[-1-id] = 0;
        if(Y[-1-id] == 0){
            Y[-1-id] = v[t++];
            if(t == v.size()) return;
            trav(-1, v, t);
        } else {
            trav(Y[-1-id], v, t);
        }
    }
}

void create_circuit(int M, vector<int> A) {
	C.resize(M + 1);
	--sz;
    for(int& x : C)
        x = -1;
    X.pb(0);
    Y.pb(0);
    st.pb(0);
    A.pb(0);
    solve(-1, A.size(), ceil(log2(A.size())));
    trav(-1, A, 0);
	answer(C, X, Y);
}

컴파일 시 표준 에러 (stderr) 메시지

doll.cpp: In function 'void trav(int, std::vector<int>&, int)':
doll.cpp:51:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |             if(t == v.size()) return;
      |                ~~^~~~~~~~~~~
doll.cpp:59:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             if(t == v.size()) return;
      |                ~~^~~~~~~~~~~
#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...