ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1401. Игроки

hints (Nostradamus advised this)
Послано Dmi3Molodov 3 июн 2026 16:47
using u32=unsigned;
u32 constexpr M = 9;
u32 n = 0, g[1<<2*M];
template<u32>void solve(u32, u32=0);
template<>void solve<2>(u32 voidXY, u32 BaseXY){
    u32 e = n++, *p = g+BaseXY, q = g[voidXY];
    *p = e, p[1] = e, p += 1<<M, *p = e, p[1] = e, g[voidXY] = q;
}
template<u32 s> void solve(u32 V, u32 B){
    auto constexpr f = solve<s/2>;
    u32 constexpr m = (1<<M)-1;
    bool a = (V&~m)<(B&~m)+(s<<M)/2;
    bool b = (V&+m)<(B&+m)+s/2;
    f(V, B+(!a)*(s<<M)/2+(!b)*s/2);
    f(B-a*(1<<M)+b+((s<<M)+s)/2-1, B-a*(s<<(M-1))+b*s/2+(s<<M)/2);
    f(B+a*(1<<M)+((s<<M)+s)/2-(1<<M)-1, B+a*(s<<M)/2);
    f(B+a*(1<<M)+((s<<M)+s)/2-(1<<M), B+a*(s<<M)/2+s/2);
    u32*c = g+((s<<M)+s)/2-(1<<M)+B;
    c[m+(b&!a)] = c[(a&b)-1] = c[a<<M] = n++;
}
//this is a very funny, but working program code.

Edited by author 03.06.2026 19:49