제출 #602827

#제출 시각아이디문제언어결과실행 시간메모리
602827SlavicG자동 인형 (IOI18_doll)C++17
0 / 100
1098 ms15956 KiB
#include "doll.h"
#include "bits/stdc++.h"
using namespace std;
const int N = 5e5;
vector<int> x(N), y(N), c, nxt[N];
int idx = 0, n, cc[N];

int build(int l, int r) {
    if(l >= n) return -1;
    if(l == r) {
        return 1;
    }
    int mid = l + r >> 1;
    int i = idx++;
    x[i] = build(l, mid);
    y[i] = build(mid + 1, r);
    return -i - 1;
}

void create_circuit(int m, vector<int> a) {
    a.push_back(0);
    n = a.size();
    c.assign(m + 1, -1);
    for(int i = 0; i < n; ++i) {
        if(i == n - 1) nxt[a[i]].push_back(0);
        else nxt[a[i]].push_back(a[i + 1]);
    }
    int N = n; while(__builtin_popcount(N) != 1) ++N;
    build(0, N - 1);
    x.resize(idx);
    y.resize(idx);

    for(int i: a) {
        int node = 0;
        while(true) {
            int nxt = (cc[node] ? y[node] : x[node]);
            if(nxt == 1) {
                if(cc[node] == 1) y[node] = i;
                else x[node] = i;
                break;
            }
            cc[node] ^= 1;
            node = -nxt - 1;
        }
    }
    answer(c, x, y);
}

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

doll.cpp: In function 'int build(int, int)':
doll.cpp:13:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   13 |     int mid = l + r >> 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...