1 条题解

  • 0
    @ 2026-9-3 10:41:17

    棋盘上的棋子:题解

    思路

    裁剪后,位于列 xx 的棋子是大小为 x−Lx-L 的 Nim 堆。因此 Bob 获胜当且仅当

    ⨁L≤ci≤R(ci−L)=0.\bigoplus_{L\le c_i\le R}(c_i-L)=0.

    同一列出现偶数次会在异或中抵消。

    做法

    子任务 1:逐询问扫描

    对每个询问扫描全部棋子并直接异或,复杂度 O(nq)O(nq)。

    子任务 2:枚举区间

    固定左端点 LL,从左到右加入各列;若该列棋子数为奇数,就异或 R−LR-L。预处理所有 O(m2)O(m^2) 个区间后常数回答。

    满分算法

    令 fk,Lf_{k,L} 表示长度 2k2^k 的区间 [L,L+2k−1][L,L+2^k-1] 内所有棋子相对 LL 的异或。合并两半时,右半每个堆增加 2k−12^{k-1};若右半棋子数为奇数,就额外异或这一位。

    回答询问时从高位到低位把 [L,R][L,R] 分成二进制块。加入长度 2k2^k 的块后,尚未加入的所有堆相对原左端点都多出这一位;若剩余棋子数为奇数,同样异或 2k2^k。前缀计数可常数判断奇偶。

    复杂度

    三种算法分别为 O(nq)O(nq)、O(m2+q)O(m^2+q)、O((m+q)log⁡m+n)O((m+q)\log m+n);满分算法空间为 O(mlog⁡m)O(m\log m)。

    • 1

    信息

    ID
    1281
    时间
    5000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者