제출 #839156

#제출 시각아이디문제언어결과실행 시간메모리
839156benjaminkleyn자동 인형 (IOI18_doll)C++17
53 / 100
110 ms16140 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;

vector<int> X, Y;
int build(vector<int> &nxt)
{
    if (nxt.size() < 2)
        return 0;
    if (nxt.size() == 2)
    {
        X.push_back(nxt[0]);
        Y.push_back(nxt[1]);
        return -X.size();
    }
    int i = X.size();
    X.push_back(0);
    Y.push_back(0);

    reverse(nxt.begin(), nxt.end());
    while (__builtin_popcount(nxt.size()) != 1)
        nxt.push_back(-1-i);
    reverse(nxt.begin(), nxt.end());

    vector<int> l, r;
    for (int i = 0; i < nxt.size(); i += 2)
    {
        l.push_back(nxt[i]);
        r.push_back(nxt[i+1]);
    }

    X[i] = build(l);
    Y[i] = build(r);
    return -1-i;
}

void create_circuit(int M, vector<int> A) 
{
    vector<vector<int>> nxt(M + 1, vector<int>());
    vector<int> root(M + 1);

    int N = A.size();
    nxt[0].push_back(A[0]);
    for (int i = 0; i < N - 1; i++)
        nxt[A[i]].push_back(A[i+1]);
    nxt[A[N-1]].push_back(0);

    vector<int> C(M + 1);
    for (int i = 0; i <= M; i++)
        if (nxt[i].size() == 1)
            C[i] = nxt[i][0];
        else
            C[i] = build(nxt[i]);
    answer(C, X, Y);
}

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

doll.cpp: In function 'int build(std::vector<int>&)':
doll.cpp:28:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |     for (int i = 0; i < nxt.size(); i += 2)
      |                     ~~^~~~~~~~~~~~
#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...