#4443. 环形卡片传递 / Circular Card Rotation

环形卡片传递 / Circular Card Rotation

题目描述

NN 个孩子围成一圈坐着。孩子们编号为 11NN,按顺时针方向依次排列为孩子 11、孩子 22\ldots、孩子 NN(孩子 NN 的顺时针邻居是孩子 11)。初始时,孩子 ii 手中恰好持有一张写有数字 ii 的卡片。

重复以下操作 KK 次:

  • 所有人同时将自己的卡片传递给顺时针方向的下一个孩子。即,孩子 ii1iN11 \leq i \leq N-1)将卡片传给孩子 i+1i+1,孩子 NN 将卡片传给孩子 11

每次操作中,每个人恰好传出一张卡片并恰好收到一张卡片,因此操作后每个孩子仍然恰好持有一张卡片。

请计算 KK 次操作后,每个孩子手中卡片上的数字。

输入格式

一行两个整数 N,KN, K

输出格式

输出 NN 行,第 ii 行表示 KK 次操作后孩子 ii 手中卡片上的数字。

5 2
4
5
1
2
3
6 0
1
2
3
4
5
6
12 25
12
1
2
3
4
5
6
7
8
9
10
11
1 1000000000000000000
1

数据范围

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 0K10180 \leq K \leq 10^{18}
  • 输入均为整数

提示

本题考查取模运算。每次操作,卡片顺时针移动一格,相当于孩子 ii 收到的卡片来自孩子 i1i-1(逆时针方向)。

KK 次操作后,孩子 ii 收到的卡片来自孩子 ((iK1)modN)+1((i - K - 1) \mod N) + 1

注意 KK 可能很大,需要用 long long 类型。

时间复杂度 O(N)O(N),空间复杂度 O(1)O(1)

来源

AtCoder AWC 0052B