Submission #1111031

#TimeUsernameProblemLanguageResultExecution timeMemory
1111031HasanV11010238Mechanical Doll (IOI18_doll)C++17
37 / 100
83 ms17276 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
#define MAX 3000000
vector<vector<int>> ve;
vector<int> x, y, de;
int nxt = 0, n;
int create(){
    nxt++;
    x.push_back(0), y.push_back(0);
    return nxt;
}
void mktr(int no, int ri, int md, int d){
    if (d == md - 1){
        x[no - 1] = -ri;
        y[no - 1] = -ri;
        return;
    }
    x[no - 1] = -create();
    mktr(-x[no - 1], ri, md, d + 1);
    y[no - 1] = -create();
    mktr(-y[no - 1], ri, md, d + 1);
}
void connect(int no, int in, int md, int d, int wh){
    int val = (1<<d) & in;
    if (d == md - 1){
        if (val == 0){
            x[no - 1] = wh;
        }
        else{
            y[no - 1] = wh;
        }
    }
    else{
        if (val == 0){
            connect(-x[no - 1], in, md, d + 1, wh);
        }
        else{
            connect(-y[no - 1], in, md, d + 1, wh);
        }
    }
}
void create_circuit(int M, vector<int> A){
    n = A.size();
    vector<int> tr(M + 1, 0);
    ve.assign(M + 1, vector<int>()), de.assign(M + 1, 0);
    for (int i = 0; i < n - 1; i++){
        ve[A[i]].push_back(A[i + 1]);
    }
    tr[0] = A[0];
    for (int i = 1; i <= M; i++){
        int d = ceil(log2(ve[i].size() + 2));
        de[i] = d;
        tr[i] = -create();
        mktr(-tr[i], -tr[i], d, 0);
        for (int j = 0; j < ve[i].size(); j++){
            connect(-tr[i], j, d, 0, ve[i][j]);
        }
    }
    connect(-tr[A[n - 1]], ve[A[n - 1]].size(), de[A[n - 1]], 0, tr[1]);
    for (int i = 1; i < M; i++){
        connect(-tr[i], (1<<de[i]) - 1, de[i], 0, tr[i + 1]);
    }
    connect(-tr[M], (1<<de[M]) - 1, de[M], 0, 0);
    answer(tr, x, y);
}

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:56:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |         for (int j = 0; j < ve[i].size(); j++){
      |                         ~~^~~~~~~~~~~~~~
#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...