编程题
储能表 ### 题目描述 有一个 $n$ 行 $m$ 列的表格,行从 $0$ 到 $n−1$ 编号,列从 $0$ 到 $m−1$ 编号。每个格子都储存着能量。最初,第 $i$ 行第 $j$ 列的格子储存着 $(i\ xor\ j)$ 点能量。所以,整个表格储存的总能量是, $$\sum_{i=0}^{n-1} \sum_{j=0}^{m-1} (i \mathrm{xor} j)$$ 随着时间的推移,格子中的能量会渐渐减少。一个时间单位,每个格子中的能量都会减少 $1$。显然,一个格子的能量减少到 $0$ 之后就不会再减少了。 也就是说,$k$ 个时间单位后,整个表格储存的总能量是 $$\sum_{i=0}^{n-1} \sum_{j=0}^{m-1} \mathrm{max} ((i \mathrm{xor} j)-k,0)$$ 给出一个表格,求 $k$ 个时间单位后它储存的总能量。 由于总能量可能较大,输出时对 $p$ 取模。 ### 输入描述 第一行一个整数 $T$,表示数据组数。 接下来 $T$ 行,每行四个整数 $n、m、k、p$。 其中,$T = 5000$,$n \leq 10 ^ {18}$,$m \leq 10 ^ {18}$,$k \leq 10 ^ {18}$,$p \leq 10 ^ 9$ 。 ### 输出描述 共 $T$ 行,每行一个数,表示总能量对 $p$ 取模后的结果。 ### 输入输出样例 #### 示例 1 >输入 ```txt 3 2 2 0 100 3 3 0 100 3 3 1 100 ``` >输出 ```txt 2 12 6 ```
查看答案
赣ICP备20007335号-2