#kSMybttg060103. 1617:转圈游戏

1617:转圈游戏

1617:转圈游戏

题目描述

nn 个小伙伴(编号从 00n1n-1)围坐一圈玩游戏。按照顺时针方向给 nn 个位置编号,从 00n1n-1。最初,第 00 号小伙伴在第 00 号位置,第 11 号小伙伴在第 11 号位置,……,依此类推。

游戏规则如下:每一轮第 00 号位置上的小伙伴顺时针走到第 mm 号位置,第 11 号位置小伙伴走到第 m+1m+1 号位置,……,依此类推,第 nmn-m 号位置上的小伙伴走到第 00 号位置,第 nm+1n-m+1 号位置上的小伙伴走到第 11 号位置,……,第 n1n-1 号位置上的小伙伴顺时针走到第 m1m-1 号位置。

现在,一共进行了 10k10^k 轮,请问 xx 号小伙伴最后走到了第几号位置。

输入格式

输入共 11 行,包含 44 个整数 nmkxn、m、k、x,每两个整数之间用一个空格隔开。

输出格式

输出共 11 行,包含 11 个整数,表示 10k10^k 轮后 xx 号小伙伴所在的位置编号。

样例

样例输入 #1

10 3 4 5

样例输出 #1

5

样例解释 #1

  • n=10n=10 个小伙伴,每轮移动 m=3m=3 个位置,进行 10k=104=1000010^k = 10^4 = 10000 轮,询问 x=5x=5 号小伙伴最终位置。
  • 初始时,小伙伴编号与位置编号相同,即小伙伴 55 在位置 55
  • 每轮移动相当于所有小伙伴的位置编号增加 mm 并对 nn 取模。
  • 经过 tt 轮后,位置编号变为 (初始位置+m×t)modn(初始位置 + m \times t) \bmod n
  • 所以 xx 号小伙伴最终位置为 (x+m×10k)modn(x + m \times 10^k) \bmod n
  • 计算:104=1000010^4 = 10000m×10k=3×10000=30000m \times 10^k = 3 \times 10000 = 3000030000mod10=030000 \bmod 10 = 0,所以 (5+0)mod10=5(5 + 0) \bmod 10 = 5
  • 输出 55

数据范围

  • 对于 30%30\% 的数据,0<k<70 < k < 7
  • 对于 80%80\% 的数据,0<k<1070 < k < 10^7
  • 对于 100%100\% 的数据,1<n<1061 < n < 10^60<m<n0 < m < n1xn1 \le x \le n0<k<1090 < k < 10^9

时空限制

  • 时间限制:1000 ms
  • 内存限制:524288 KB

注意:本题的关键是计算 m×10kmodnm \times 10^k \bmod n。由于 kk 可能很大,不能直接计算 10k10^k,需要用快速幂计算 10kmodn10^k \bmod n,然后乘以 mm 再取模。注意 nn 不是质数,但快速幂取模仍然适用。最终答案为 (x+m×10kmodn)modn(x + m \times 10^k \bmod n) \bmod n。由于 xx[1,n][1, n] 范围内,而位置编号从 00 开始,但题目说 xx 号小伙伴初始在位置 xx,说明位置编号也是从 11 开始?实际上题目描述:编号从 00n1n-1,最初第 00 号小伙伴在第 00 号位置,所以位置编号也是 0n10 \sim n-1。但输入 xx 的范围是 1xn1 \le x \le n,可能 x=nx=n 对应编号 00?需要仔细理解。根据样例,n=10,x=5n=10, x=5,输出 55,说明 xx 就是位置编号,且从 00 开始?但 x=5x=5[1,10][1,10] 内,所以 xx 可能是 1n1 \sim n,对应位置编号 x1x-1?验证:如果 xx1n1 \sim n,初始位置应为 x1x-1,则最终位置为 (x1+m×10k)modn(x-1 + m \times 10^k) \bmod n。样例中 x=5x=5,初始位置 44,计算 (4+3×10000)mod10=4(4 + 3 \times 10000) \bmod 10 = 4,输出应为 44,但样例输出 55,矛盾。所以 xx 就是位置编号,且从 00 开始,但输入范围 1xn1 \le x \le n 中,当 x=nx=n 时对应位置 00?实际上 n=10n=10 时位置编号为 090\sim 9,没有 1010,所以 xx 应为 0n10 \sim n-1,但题目可能输入 1n1 \sim n,需要转换。但样例输入 x=5x=5 输出 55,说明 xx 就是位置编号 55。因此我们直接使用 xx 计算即可,注意 xx 可能等于 nn?如果 x=nx=n,则位置编号为 00(因为模 nn 后为 00)。所以最终公式为 (xmodn+m×10kmodn)modn(x \bmod n + m \times 10^k \bmod n) \bmod n,其中 xx 是输入的 xx。为保险起见,可以先将 xxnn 取模。