A93309.「SDOI2016」储能表

省选/NOI-

省选

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

有一个 $ n $ 行 $ m $ 列的表格,行从 $ 0 $ 到 $ n - 1 $ 编号,列从 $ 0 $ 到 $ m - 1 $ 编号。
每个格子都储存着能量。最初,第 $ i $ 行第 $ j $ 列的格子储存着 $ (i \mathbin{\text{xor}} j) $ 点能量。所以,整个表格储存的总能量是,

i=0n1j=0m1(ixorj)\sum\limits_{i = 0} ^ {n - 1} \sum\limits_{j = 0} ^ {m - 1} (i \mathbin{\text{xor}} j)

随着时间的推移,格子中的能量会渐渐减少。一个时间单位,每个格子中的能量都会减少 $ 1 $。显然,一个格子的能量减少到 $ 0 $ 之后就不会再减少了。
也就是说,$ k $ 个时间单位后,整个表格储存的总能量是,

i=0n1j=0m1max((ixorj)k,0)\sum\limits_{i = 0} ^ {n - 1} \sum\limits_{j = 0} ^ {m - 1} \max((i \mathbin{\text{xor}} j) - k, 0)

给出一个表格,求 $ k $ 个时间单位后它储存的总能量。
由于总能量可能较大,输出时对 $ p $ 取模。

输入格式

第一行一个整数 $ T $,表示数据组数。
接下来 $ T $ 行,每行四个整数 $ n m k p $。

输出格式

TT 行,每行一个数,表示总能量对 pp 取模后的结果。

输入输出样例

  • 输入#1

    3
    2 2 0 100
    3 3 0 100
    3 3 1 100

    输出#1

    2
    12
    6

说明/提示

测试点 1 ~ 2:$ T = 5000 n \leq 100 m \leq 100 k \leq 100 p \leq 10 ^ 9 ;测试点3; 测试点 3: T = 5000 n \leq 10 ^ {18} m \leq 10 ^ {18} k = 0 p \leq 10 ^ 9 ;测试点4; 测试点 4: T = 5000 n \leq 10 ^ {18} m \leq 10 ^ {18} k = 1 p \leq 10 ^ 9 ;测试点5; 测试点 5: T = 5000 n \leq 10 m \leq 10 ^ {18} k \leq 10 p \leq 10 ^ 9 ;测试点6; 测试点 6: T = 1 n \leq 10 ^ 5 m \leq 10 ^ {18} k \leq 10 ^ 5 p \leq 10 ^ 9 ;测试点7; 测试点 7: T = 1 n \leq 10 ^ {18} m \leq 10 ^ {18} k \leq 10 ^ {18} p \leq 10 ^ 9 ;测试点8; 测试点 8: T = 100 n \leq 10 ^ {18} m \leq 10 ^ {18} k \leq 10 ^ {18} p \leq 10 ^ 9 ;测试点9 10; 测试点 9 ~ 10: T = 5000 n \leq 10 ^ {18} m \leq 10 ^ {18} k \leq 10 ^ {18} p \leq 10 ^ 9 $。

首页