Submission #1020982

#TimeUsernameProblemLanguageResultExecution timeMemory
1020982ZanP자동 인형 (IOI18_doll)C++17
6 / 100
65 ms13008 KiB
#include "doll.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
struct xyswitch {
    int x, y;
    xyswitch() {}
    xyswitch(int x, int y) { this->x = x; this->y = y; }
};
void answer(vector<int> C, vector<int> X, vector<int> Y);
vector<xyswitch> xyswitches;
void make_switches(vector<int>& connected, int filler, int base_switch) {
    vector<int> s1, s2;
    int m = connected.size();
    int f1 = min(filler, (m+filler)/2), f2 = filler - f1;
    for (int i = 0; i < m; i++) {
        if (i % 2 == 0) {
            if (i/2 >= f1) { s1.push_back(connected[i]); }
            else s2.push_back(connected[i]);
        } else {
            s2.push_back(connected[i]);
        }
    }

    int x, y;
    xyswitches.push_back(xyswitch());
    int sn = xyswitches.size() - 1;
    if (s1.size() == 0) { xyswitches[sn].x = base_switch; }
    else if (s1.size() == 1) {
        xyswitches[sn].x = s1[0];
    } else {
        xyswitches[sn].x = -((int)xyswitches.size() + 1); 
        make_switches(s1, f1, base_switch); 
    }
    
    if (s2.size() == 1) {
        xyswitches[sn].y = s2[0];
    } else {
        xyswitches[sn].y = -((int)xyswitches.size()+1);
        make_switches(s2, f2, base_switch);
    }
}


    

void create_circuit(int M, std::vector<int> A) {
    int n = A.size();
    vector<vector<int>> repetitions;
    repetitions.resize(M+1);
    vector<int> c(M+1,0);
    for (int i = 0; i < n - 1; i++) {
        repetitions[A[i]].push_back(A[i + 1]);
    }
    repetitions[A[n - 1]].push_back(0);

    for (int i = 1; i <= M; i++)
    {
        int m = repetitions[i].size(), mxtwo = 1;
        while (mxtwo < m) { mxtwo *= 2; }
        if (m == 0) { continue; }
        if (m == 1) {
            c[i] = repetitions[i][0];
        }
        else {
            c[i] = -(int)xyswitches.size() - 1;
            make_switches(repetitions[i], mxtwo - m, xyswitches.size() + 1);
        }
    }
    int s = xyswitches.size();
    vector<int> x(s), y(s);
    c[0] = A[0];
    for (int i = 0; i < s; i++) {
        x[i] = xyswitches[i].x;
        y[i] = xyswitches[i].y;
    }
    answer(c, x, y);
}

Compilation message (stderr)

doll.cpp: In function 'void make_switches(std::vector<int>&, int, int)':
doll.cpp:27:9: warning: unused variable 'x' [-Wunused-variable]
   27 |     int x, y;
      |         ^
doll.cpp:27:12: warning: unused variable 'y' [-Wunused-variable]
   27 |     int x, y;
      |            ^
#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...