제출 #1366895

#제출 시각아이디문제언어결과실행 시간메모리
1366895biserailievaCarnival (EGOI23_carnival)C++20
40 / 100
1094 ms2992 KiB
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    if(n<=8)
    {
        vector<vector<int>>V(n);
        for(int i=0;i<n-1;i++)
        {
            for(int j=0;j<i+1;j++)
            {
                int x;
                cin>>x;
                if(j>=(i+2)/2)
                {
                    V[i+1].push_back(x);
                    V[x].push_back(i+1);
                }
            }
        }
        int A[n];
        for(int i=0;i<n;i++)
        {
            A[i]=i;
        }
        bool valid;
        do
        {
            valid=true;
            for(int i=0;i+1<n;i++)
            {
                for(int br : V[A[i]])
                {
                    if(br==A[i+1])
                    {
                        valid=false;
                    }
                }
                for(int br : V[A[i+1]])
                {
                    if(br==A[i])
                    {
                        valid=false;
                    }
                }
            }
            if(valid)
            {
                for(int i=0;i<n;i++)
                {
                    cout<<A[i]<<' ';
                }
                cout<<endl;
                return 0;
            }
            
        }while(next_permutation(A, A+n));
    }
    vector<int>V[n];
    bool s=true, rev=true;
    for(int i=0;i<n-1;i++)
    {
        vector<int>A;
        for(int j=0;j<i+1;j++)
        {
            int x;
            cin>>x;
            V[i].push_back(x);
            A.push_back(x);
        }
        sort(A.begin(), A.end());
        if(A!=V[i])
        {
            s=false;
        }
        reverse(A.begin(), A.end());
        if(A!=V[i])
        {
            rev=false;
        }
    }
    if(rev)
    {
        for(int i=0;i<n;i++)
        {
            cout<<i<<' ';
        }
        cout<<endl;
    }
    else if(s)
    {
        vector<int>dozv[n];
        for(int i=n-1;i>=0;i--)
        {
            for(int j=0;j<=n-1;j++)
            {
                if(i==j)
                {
                    continue;
                }
                if(j>=(i+1)/2)
                {
                    continue;
                }
                if(dozv[j].empty())
                {
                    dozv[i].push_back(j);
                }
                else
                {
                    for(int br : dozv[j])
                    {
                        if(br==i)
                        {
                            dozv[i].push_back(br);
                        }
                    }
                }
            }
        }
        deque<int>dq;
        set<int>used;
        dq.push_back(0);
        dq.push_back(n/2);
        dq.push_front(n/2+1);
        used.insert(0);
        used.insert(n/2);
        used.insert(n/2+1);
        int step=0;
        while(dq.size()<n)
        {
            if(step==0)
            {
                int x=dq.front();
                for(int d : dozv[x])
                {
                    if(used.find(d)!=used.end())
                    {
                        dq.push_front(d);
                        used.insert(d);
                        break;
                    }
                }
                step=1;
            }
            else
            {
                int x=dq.back();
                for(int d : dozv[x])
                {
                    if(used.find(d)!=used.end())
                    {
                        dq.push_back(d);
                        used.insert(d);
                        break;
                    }
                }
                step=0;
            }
        }
        for(int d : dq)
        {
            cout<<d<<' ';
        }
        cout<<endl;
    }
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…