답안 #975421

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
975421 2024-05-05T06:30:36 Z LucaIlie 자동 인형 (IOI18_doll) C++17
53 / 100
103 ms 17708 KB
#include "doll.h"
#include <bits/stdc++.h>

using namespace std;

const int MAX_M = 1e5;
const int MAX_L = (1 << 18);
int ord[MAX_L];
vector<int> adj[MAX_M + 1];

int switchid( int x ) {
    return -(x + 1);
}

void create_circuit( int m, vector<int> a ) {
    int n = a.size();

    vector<int> c( m + 1 ), x, y;

    a.push_back( 0 );
    reverse( a.begin(), a.end() );
    a.push_back( 0 );
    reverse( a.begin(), a.end() );

    for ( int i = 0; i < a.size() - 1; i++ )
        adj[a[i]].push_back( a[i + 1] );

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

        int p = ceil( log2( adj[i].size() ) );
        int r = x.size();
        x.resize( r + (1 << p) - 1 );
        y.resize( r + (1 << p) - 1 );
        c[i] = switchid( r );
        for ( int v = 0; v < (1 << (p - 1)) - 1; v++ ) {
            x[r + v] = switchid( r + v * 2 + 1 );
            y[r + v] = switchid( r + v * 2 + 2 );
        }
        for ( int a = 0; a < (1 << p); a++ ) {
            int c = 0;
            for ( int b = 0; b < p; b++ ) {
                if ( (a >> b) & 1 )
                    c += (1 << (p - 1 - b));
            }
            ord[c] = a;
        }
        int ind = 0;
        for ( int j = 0; j < (1 << p); j++ ) {
            int a = ord[j];
            int v = r + (1 << (p - 1)) - 1 + a / 2;
            if ( j + 1 + adj[i].size() <= (1 << p) ) {
                if ( a % 2 == 0 )
                    x[v] = switchid( r );
                else
                    y[v] = switchid( r );
            } else {
                if ( a % 2 == 0 )
                    x[v] = adj[i][ind];
                else
                    y[v] = adj[i][ind];
                ind++;
            }
        }
    }

    answer( c, x, y );
}

Compilation message

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:25:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |     for ( int i = 0; i < a.size() - 1; i++ )
      |                      ~~^~~~~~~~~~~~~~
doll.cpp:57:40: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   57 |             if ( j + 1 + adj[i].size() <= (1 << p) ) {
      |                  ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
doll.cpp:16:9: warning: unused variable 'n' [-Wunused-variable]
   16 |     int n = a.size();
      |         ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2648 KB Output is correct
2 Correct 20 ms 7000 KB Output is correct
3 Correct 14 ms 6484 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 7 ms 3928 KB Output is correct
6 Correct 30 ms 8352 KB Output is correct
7 Correct 1 ms 2784 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2648 KB Output is correct
2 Correct 20 ms 7000 KB Output is correct
3 Correct 14 ms 6484 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 7 ms 3928 KB Output is correct
6 Correct 30 ms 8352 KB Output is correct
7 Correct 1 ms 2784 KB Output is correct
8 Correct 32 ms 9432 KB Output is correct
9 Correct 34 ms 9664 KB Output is correct
10 Correct 65 ms 13756 KB Output is correct
11 Correct 1 ms 2652 KB Output is correct
12 Correct 1 ms 2652 KB Output is correct
13 Correct 1 ms 2652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2648 KB Output is correct
2 Correct 20 ms 7000 KB Output is correct
3 Correct 14 ms 6484 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 7 ms 3928 KB Output is correct
6 Correct 30 ms 8352 KB Output is correct
7 Correct 1 ms 2784 KB Output is correct
8 Correct 32 ms 9432 KB Output is correct
9 Correct 34 ms 9664 KB Output is correct
10 Correct 65 ms 13756 KB Output is correct
11 Correct 1 ms 2652 KB Output is correct
12 Correct 1 ms 2652 KB Output is correct
13 Correct 1 ms 2652 KB Output is correct
14 Correct 64 ms 15312 KB Output is correct
15 Correct 34 ms 9024 KB Output is correct
16 Correct 60 ms 12900 KB Output is correct
17 Correct 2 ms 2652 KB Output is correct
18 Correct 2 ms 2652 KB Output is correct
19 Correct 1 ms 2648 KB Output is correct
20 Correct 55 ms 12780 KB Output is correct
21 Correct 1 ms 2652 KB Output is correct
22 Correct 1 ms 2652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2652 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Partially correct 1 ms 2648 KB Output is partially correct
2 Correct 36 ms 9888 KB Output is correct
3 Partially correct 62 ms 12500 KB Output is partially correct
4 Partially correct 68 ms 13632 KB Output is partially correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 1 ms 2648 KB Output is partially correct
2 Correct 36 ms 9888 KB Output is correct
3 Partially correct 62 ms 12500 KB Output is partially correct
4 Partially correct 68 ms 13632 KB Output is partially correct
5 Partially correct 74 ms 15024 KB Output is partially correct
6 Partially correct 77 ms 15932 KB Output is partially correct
7 Partially correct 84 ms 16168 KB Output is partially correct
8 Partially correct 76 ms 16288 KB Output is partially correct
9 Partially correct 63 ms 13144 KB Output is partially correct
10 Partially correct 89 ms 17708 KB Output is partially correct
11 Partially correct 103 ms 17396 KB Output is partially correct
12 Partially correct 55 ms 12876 KB Output is partially correct
13 Partially correct 49 ms 11276 KB Output is partially correct
14 Partially correct 49 ms 11080 KB Output is partially correct
15 Partially correct 46 ms 10792 KB Output is partially correct
16 Partially correct 2 ms 2904 KB Output is partially correct
17 Partially correct 41 ms 10516 KB Output is partially correct
18 Partially correct 47 ms 10484 KB Output is partially correct
19 Partially correct 47 ms 11600 KB Output is partially correct
20 Partially correct 60 ms 14424 KB Output is partially correct
21 Partially correct 85 ms 15176 KB Output is partially correct
22 Partially correct 54 ms 13132 KB Output is partially correct