2162 2022. 12. 26 21:07:56 abelke2 Táblajáték cpp17 Elfogadva 50/50 3ms 3876 KiB
#include <iostream>
#include <deque>
#define ull unsigned long long

using namespace std;

int n = 0;
int lepessor[500];

void beolvas()
{
    cin >> n;
    for (int i = 0; i <= n - 1; ++i)
    {
        cin >> lepessor[i];
    }
}

void kiir_oszlop(deque <int> &oszlop, int index)
{
    int k = 0;
    while (k <= index-1 && oszlop[k] == 0)    //atugrom a felesleges nullakat
    {
        ++k;
    }
    while (k <= index)                      //kiiratas
    {
        cout << oszlop[k];
        ++k;
    }
}

void bejar(int n, int lepessor[])
{
    int sor = 0;
    deque <int> oszlop;
    oszlop.resize(501);
    for (auto e : oszlop)
    {
        e = -1;
    }
    oszlop[0] = 0;
    int index = 0;
    for (int i = 0; i <= n - 1; ++i)
    {
        if (lepessor[i] == 0)//balra lefele
        {
            ++sor;
            ++index;
            oszlop[index] = 0;
        }
        else if (lepessor[i] == 1)//jobbra lefele
        {
            ++sor;
            ++index;
            oszlop[index] = 1;
        }
        else if (lepessor[i] == 2)//felfele
        {
            --sor;
            //oszlop[index] = 0;
            --index;
        }
        else if (lepessor[i] == 3)//balra - hatulrol az elso 1-es 0 lesz, a tobbi mogotte 1
        {
            int k = index;
            while (oszlop[k] != 1)              //elmegyek az elso 1-ig
            {
                --k;
            }                       
            oszlop[k] = 0;                      //0-ra allitom

            ++k;
            while (k <= index)      //majd vegigmegyek a hata fele es mindent beegyesezek
            {
                oszlop[k] = 1;
                ++k;
            }
        }
        else if (lepessor[i] == 4)//jobbra - leszimulalom az osszeadast elso osztalybol
        {
            int maradek = 0;
            int k = index;
            do
            {
                maradek = 0;
                if (oszlop[k] == 1)
                {
                    oszlop[k] = 0;
                    maradek = 1;
                }
                else
                {
                    oszlop[k] = 1;
                    maradek = 0;
                }
                --k;
            } while (maradek == 1 && k>=0);
        }
    }
    cout << sor << "\n";
    kiir_oszlop(oszlop, index);
}

int main()
{
    beolvas();
    bejar(n, lepessor);
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1688 KiB
2 Elfogadva 0/0 2ms 1856 KiB
3 Elfogadva 3/3 2ms 2056 KiB
4 Elfogadva 3/3 2ms 2296 KiB
5 Elfogadva 3/3 2ms 2496 KiB
6 Elfogadva 3/3 2ms 2668 KiB
7 Elfogadva 3/3 2ms 2744 KiB
8 Elfogadva 3/3 2ms 2868 KiB
9 Elfogadva 3/3 2ms 3092 KiB
10 Elfogadva 3/3 2ms 3280 KiB
11 Elfogadva 3/3 2ms 3388 KiB
12 Elfogadva 3/3 2ms 3592 KiB
13 Elfogadva 4/4 2ms 3668 KiB
14 Elfogadva 4/4 2ms 3672 KiB
15 Elfogadva 4/4 2ms 3868 KiB
16 Elfogadva 4/4 2ms 3876 KiB
17 Elfogadva 4/4 2ms 3872 KiB