Pull to refresh

Comments 4

Доминошки в первой задаче должны располагаться в какой-то обязательной последовательности относительно друг друга, или это просто юнит 2х1?
Задача из примера 5 решается динамикой по профилю, если кому-то еще актуально:
void solve( )
{   
    int N = 0;
    while (true) {
        cin >> N;
        if (N == -1) return;
        ll a[32][8];
        for (int i = 0; i < 8; ++i) a[0][i] = 0;
        a[0][0b00000111] = 1;
        for (int i = 1; i <= N+1; ++i) {
            a[i][0b00000001] = a[i-1][0b00000110];
            a[i][0b00000011] = a[i-1][0b00000100] + a[i-1][0b00000111];
            a[i][0b00000100] = a[i-1][0b00000011];
            a[i][0b00000110] = a[i-1][0b00000001] + a[i-1][0b00000111];
            a[i][0b00000111] = a[i-1][0b00000011] + a[i-1][0b00000110];
            if (i >= 2)
                a[i][7] += a[i-2][7];
        }
        if (N%2==0)
            cout << a[N][7] << endl;
        else
            cout << 0 << endl;
    }
}

Аналогично решается задача «замостить доминошками поле N*M», только там все допустимые переходы нужно уже генерировать, а не просчитывать вручную как сделал я. Описание есть здесь
Когда на собеседовании начинают задавать задачи на логику, теорию вероятности и прочее, особенно когда не дают время спокойно подумать, хочется встать и уйти. Глупости это, не имеющие никакого отношения к уровню профессионализма разработчика.
Как сказал один мой товарищ, умение решать ребусы говорит только о том, что человек умеет решать ребусы.
Sign up to leave a comment.

Articles