Cod sursa(job #2345711)

Utilizator petru.ciocirlanPetru Ciocirlan petru.ciocirlan Data 16 februarie 2019 17:04:28
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <stack>
using namespace std;

#define FILE_NAME "biti"
ifstream fin (FILE_NAME".in");
ofstream fout(FILE_NAME".out");

const int MAXN = 20 + 2;
char adv[MAXN];
int N, MASK, K;
char sol[(1 << MAXN) + MAXN];

void euler(int nod)
{
    stack < int > ST;
    stack < bool > suffix;
    ST.push(nod);
    suffix.push(0);
    while(!ST.empty())
    {
        nod = ST.top();

        if(adv[nod] < 2)
        {
            suffix.push(adv[nod]);
            ST.push(((nod << 1) | (adv[nod]&1)) & MASK);
            ++adv[nod];
        }
        else
        {
            sol[K++] = '0' + suffix.top();
            ST.pop(), suffix.pop();
        }
    }
}

int main()
{
    fin >> N;
    N--;
    MASK = (1 << N) - 1;

    euler(0);
    K--;
    for(int i = 0; i < N; ++i)
        sol[K++] = sol[i];
    sol[K] = '\0';
    fout << K << '\n' << sol;

    return 0;
}