1325: 「SCOI2014」方伯伯打扑克
[Creator : ]
Description
方伯伯有一些空白的扑克(?)牌。方伯伯想要用这些牌来玩一个数学游戏。
方伯伯首先决定好他要用这些空白的扑克牌组成 mmm 个牌堆,每一堆牌的张数都是 222 的整数次幂。确切地说,第 iii 堆(注意:从 000 开始计数)牌将会有 2ni2^{n_i}2ni 张牌。方伯伯首先决定好第 000 堆牌要有 2n02^{n_0}2n0 张牌,然后将这堆牌从上到下按次序标记 1∼2n01 \sim 2^{n_0}1∼2n0 的十进制数字。
方伯伯开始游戏前决定要先洗牌,他决定好要洗 x0x_0x0 次牌。他洗牌有一个固定的模式,每次洗牌操作等同于以下两个步骤的操作:
洗完牌后,方伯伯在心中决定好把其中从上往下数第 l0l_0l0 到第 r0r_0r0 张牌上的数字均加上一个数字 t0t_0t0,并依次(转换成二进制)异或之后得到一个异或值;方伯伯把第 000 堆牌的这个异或值取模 mod2n0−1 的值记作 ans0\mathrm{ans}_0ans0。
类似地,方伯伯将按同样的方式用剩下的 m−1m-1m−1 个牌堆。具体地说,他决定按照如下几个公式来对每一堆牌组进行游戏:
方伯伯首先决定好他要用这些空白的扑克牌组成 mmm 个牌堆,每一堆牌的张数都是 222 的整数次幂。确切地说,第 iii 堆(注意:从 000 开始计数)牌将会有 2ni2^{n_i}2ni 张牌。方伯伯首先决定好第 000 堆牌要有 2n02^{n_0}2n0 张牌,然后将这堆牌从上到下按次序标记 1∼2n01 \sim 2^{n_0}1∼2n0 的十进制数字。
方伯伯开始游戏前决定要先洗牌,他决定好要洗 x0x_0x0 次牌。他洗牌有一个固定的模式,每次洗牌操作等同于以下两个步骤的操作:
- 将所有奇数位上的牌依次取出组成新的一堆牌。
- 将新的一堆牌放在旧有的牌前面。
洗完牌后,方伯伯在心中决定好把其中从上往下数第 l0l_0l0 到第 r0r_0r0 张牌上的数字均加上一个数字 t0t_0t0,并依次(转换成二进制)异或之后得到一个异或值;方伯伯把第 000 堆牌的这个异或值取模 mod2n0−1 的值记作 ans0\mathrm{ans}_0ans0。
类似地,方伯伯将按同样的方式用剩下的 m−1m-1m−1 个牌堆。具体地说,他决定按照如下几个公式来对每一堆牌组进行游戏:
-
对于第 iii 堆牌,牌堆中将会有 2ni−12^{n_i-1}2ni−1 张牌,并从上到下标有 1∼2ni−11\sim 2^{n_i-1}1∼2ni−1 的十进制整数。其中,ni=(ansi−1+i−1)mod5+base, ba
se\mathrm{ba base 是一个方伯伯事先决定好的正整数。se} - 方伯伯将会先决定好自己用来游戏的牌处于牌堆中的什么位置。方伯伯首先决定好他要看的第一张牌应该是第 lil_ili 张,其中 li=(2ansi−1+li−1+i−1)mod2ni+1。
- 方伯伯接着决定他要看的最后一张牌应该是第 rir_iri 张,其中 ri=(ansi−1+1+l1mod2⌊ni/2⌋⋅2⌊ni/2⌋)mod2ni+1。
- 因为上面两个式子并不简单,有可能会产生 li>ril_i>r_ili>ri 的结果,此时将它们的值互换。
- 想好自己要看什么牌后,方伯伯就会以此决定自己要洗 xix_ixi 次牌,其中 xi=(ri−li+ti−1+i)mod2ni。
- 方伯伯同时还会想好他要给每张牌要加上数字的是 tit_iti,其中 ti=(li+ri)mod2ni。
- 方伯伯洗完牌后,把其中从上往下数第 lil_ili 到第 rir_iri 张牌上的数字均加上数字 tit_iti,并依次(转换成二进制)异或之后得到一个异或值;方伯伯把第 iii 堆牌的这个异或值取模 mod2ni−1 的值记作 ansi\mathrm{ans}_iansi,接着回到第一步玩下一个牌堆。
Input
第一行包含一个整数 mmm,表示牌组的个数。
接下来一行包含六个整数,分别为 n0,x0,l0,r0,t0,basen_0, x_0 ,l_0 ,r_0, t_0 , \mathrm{base} n0,x0,l0,r0,t0,Base。
Output
输出为一个数,表示最后的答案。
Sample 1 Input
2
5 1 4 27 3 15
Sample 1 Output
2700