제출 #836151

#제출 시각아이디문제언어결과실행 시간메모리
836151mousebeaver자동 인형 (IOI18_doll)C++14
53 / 100
119 ms13392 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

void dfs(vector<int> adjlist, vector<int>& x, vector<int>& y)
{
    //adjlist.size() > 1, insert new switch
    if(adjlist.size()%2 == 1)
    {
        adjlist.insert(adjlist.begin(), -(x.size()+1));
    }

    if(adjlist.size()%2 == 0)
    {
        x.push_back(0);
        y.push_back(0);
        int index = x.size()-1;    
        if(adjlist.size() == 2)
        {
            x.back() = adjlist[0];
            y.back() = adjlist[1];
            return;
        }
        vector<int> even(0);
        vector<int> odd(0);
        for(int i = 0; i < (int) adjlist.size(); i++)
        {
            if(i%2 == 0)
            {
                even.push_back(adjlist[i]);
            }
            else
            {
                odd.push_back(adjlist[i]);
            }
        }
        
        x[index] = -(x.size()+1);
        dfs(even, x, y);

        y[index] = -(x.size()+1);
        dfs(odd, x, y);
        return;
    }

    /*//Uneven size of adjlist?
    int index = x.size();
    x.push_back(0);
    y.push_back(0);
    x.back() = -(x.size()+1);
    y.back() = -(x.size()+2);
    x.push_back(adjlist[0]);
    y.push_back(adjlist[1]);
    x.push_back(-(index+1));
    y.push_back(adjlist[2]);*/
}

void create_circuit(int m, std::vector<int> a) 
{
    int n = a.size();
    vector<vector<int>> adjlist(m+1, vector<int> (0));
    adjlist[0] = {a[0]};
    for(int i = 0; i < n-1; i++)
    {
        adjlist[a[i]].push_back(a[i+1]);
    }
    adjlist[a[n-1]].push_back(0);

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

    for(int i = 0; i <= m; i++)
    {
        if(adjlist[i].empty())
        {
            continue;
        }
        if(adjlist[i].size() == 1)
        {
            c[i] = adjlist[i][0];
            continue;
        }
        c[i] = -(x.size()+1);
        dfs(adjlist[i], x, y);
    }

    answer(c, 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...