답안 #756719

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
756719 2023-06-12T06:36:04 Z boris_mihov 자동 인형 (IOI18_doll) C++17
37 / 100
90 ms 11944 KB
#include <algorithm>
#include <iostream>
#include <cassert>
#include <numeric>
#include <vector>
#include "doll.h"

typedef long long llong;
const int MAXN = 1000000 + 10;
const int MAXS = 1000000 + 10;
const int INF  = 1e9;

int n, m, cnt;
std::vector <int> a, x, y, c;
int perm[MAXN];
int treeRoot;

void rec(int l, int r, int root)
{
    assert(l != r);
    if (l + 1 == r)
    {
        if (perm[l] < a.size()) y[root - 1] = a[perm[l]];
        else y[root - 1] = -treeRoot;

        if (perm[r] < a.size()) x[root - 1] = a[perm[r]];
        else x[root - 1] = -treeRoot;
        return;
    }

    int mid = (l + r) / 2;
    x.push_back(0);
    x.push_back(0);
    y.push_back(0);
    y.push_back(0);
    cnt += 2;

    y[root - 1] = -(cnt - 1);
    x[root - 1] = -cnt;
    rec(l, mid, -y[root - 1]);
    rec(mid + 1, r, -x[root - 1]);
}

int reversed(int x, int bits)
{
    int res = 0;
    for (int i = 0 ; i < bits ; ++i)
    {
        if (x & (1 << i))
        {
            res |= (1 << bits - 1 - i);
        }
    }

    return res;
}

void create_circuit(int M, std::vector <int> A)
{
    m = M; n = A.size(); A.push_back(0); a = A;
    c.resize(m + 1);

    if (a.size() == 1)
    {
        c[a[0]] = 0;
    } else
    {
        for (int i = 0 ; i <= m ; ++i)
        {
            c[i] = -1;
        }

        int sz = 1, bits = 0;
        while (sz < a.size())
        {
            sz <<= 1;
            bits++;
        }

        x.push_back(0);
        y.push_back(0);
        std::reverse(a.begin(), a.end());
        std::iota(perm, perm + sz, 0);
        for (int i = 0 ; i < sz ; ++i)
        {
            int rev = reversed(i, bits);
            if (perm[i] > perm[rev])
            {
                std::swap(perm[i], perm[rev]);
            }
        }

        cnt++;
        treeRoot = cnt;
        rec(0, sz - 1, cnt);
    }

    answer(c, x, y);
}

Compilation message

doll.cpp: In function 'void rec(int, int, int)':
doll.cpp:23:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |         if (perm[l] < a.size()) y[root - 1] = a[perm[l]];
      |             ~~~~~~~~^~~~~~~~~~
doll.cpp:26:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |         if (perm[r] < a.size()) x[root - 1] = a[perm[r]];
      |             ~~~~~~~~^~~~~~~~~~
doll.cpp: In function 'int reversed(int, int)':
doll.cpp:51:35: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   51 |             res |= (1 << bits - 1 - i);
      |                          ~~~~~~~~~^~~
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:74:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |         while (sz < a.size())
      |                ~~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Partially correct 1 ms 212 KB Output is partially correct
2 Partially correct 84 ms 9196 KB Output is partially correct
3 Partially correct 79 ms 9316 KB Output is partially correct
4 Partially correct 85 ms 10960 KB Output is partially correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 1 ms 212 KB Output is partially correct
2 Partially correct 84 ms 9196 KB Output is partially correct
3 Partially correct 79 ms 9316 KB Output is partially correct
4 Partially correct 85 ms 10960 KB Output is partially correct
5 Partially correct 88 ms 11944 KB Output is partially correct
6 Partially correct 84 ms 11772 KB Output is partially correct
7 Partially correct 89 ms 11836 KB Output is partially correct
8 Partially correct 86 ms 11600 KB Output is partially correct
9 Partially correct 87 ms 9224 KB Output is partially correct
10 Partially correct 83 ms 11496 KB Output is partially correct
11 Partially correct 82 ms 11344 KB Output is partially correct
12 Partially correct 78 ms 9396 KB Output is partially correct
13 Partially correct 78 ms 9700 KB Output is partially correct
14 Partially correct 78 ms 9776 KB Output is partially correct
15 Partially correct 83 ms 9940 KB Output is partially correct
16 Partially correct 3 ms 664 KB Output is partially correct
17 Correct 47 ms 6648 KB Output is correct
18 Partially correct 78 ms 9384 KB Output is partially correct
19 Partially correct 79 ms 9448 KB Output is partially correct
20 Partially correct 89 ms 11432 KB Output is partially correct
21 Partially correct 81 ms 11196 KB Output is partially correct
22 Partially correct 90 ms 11276 KB Output is partially correct