ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1401. Gamers

hints (Nostradamus advised this)
Posted by Dmi3Molodov 3 Jun 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