P15626 [ICPC 2022 Jakarta R] Short Function
题目描述
上周,你的算法课程讲师布置了一项作业,要求你确定给定伪代码函数的输出。尽管作业只包含一个问题,但讲师警告你不要低估它,并建议你花更多时间来完成。
以下是你需要在截止日期前完成的作业内容。
---
给定一个长度为 $N$ 的正整数数组 $A[]$(下标从 $0$ 到 $N-1$),一个整数 $K$,以及下面的伪代码函数。你在本题中的任务是根据给定的输入确定以下函数的输出。
```cpp
SomeFunction(A[0..N-1], N, K):
B[0..N-1] = A[0..N-1]
for i = 0 to K-1:
A[0..N-1] = B[0..N-1]
for j = 0 to N-1:
B[j] = A[j] × A[(j + 2^i) mod N]
return B[0..N-1]
这里,2^i 表示 pow(2, i)
```
函数的输出是什么(即 $B[0..N-1]$ 的值是多少)?请向你的助教询问输入 $A[]$、$N$ 和 $K$。
**重要提示**:由于 $B[0..N-1]$ 的返回值可能非常大,验证起来会非常麻烦,因此你必须将 $B[0..N-1]$ 的每个元素对 $998244353$ 取模。
---
由于这个问题看起来简短且简单,你决定将作业留到提交截止前的最后一刻。你成功从助教那里获得了所需的输入(数组 $A$、整数 $N$ 和整数 $K$),但在实现伪代码函数后,你很快为自己的懒惰决定感到后悔。显然,直接实现该函数可能需要数小时才能运行。
现在你需要冷静下来,在截止日期前根据给定输入计算出函数的输出。
输入格式
输入以两个整数 $N$ $K$($1 \leq N \leq 100\,000$;$1 \leq K \leq 10^9$)开始,分别表示输入数组 $A$ 的大小和给定的整数。接下来一行包含 $N$ 个整数 $A_i$($1 \leq A_i < 998\,244\,353$),表示数组 $A$ 的元素。
输出格式
在一行中输出 $N$ 个整数,每个整数之间用一个空格分隔,表示函数的输出(即数组 $B[]$)。将 $B[]$ 中的每个元素对 $998\,244\,353$ 取模。请参考样例输出以明确格式。