Loading

ARC149E Sliding Window Sort(组合)

ARC149E Sliding Window Sort

给定 \(M, K\)\(N\) 排列 \(B\)。问对 \(i = 0 \to K - 1\) 依次执行对 \(j = 0 \to M - 1, A_{(i + j) \bmod N}\) 这段循环区间排序,最终得到 \(B\),初始 \(A\) 有几种。模 \(998244353\)\(N \le 300000\)\(K \le 10 ^ 9\)

CODE

首先如果 \(K \ge N - M + 1\),这时候滑窗的后 \(M - 1\) 个数必然是 \([N - M + 1, N)\),且每次操作就是把滑窗后一个数放前面。于是可以还原出 \(K = N - M + 1\)\(B\)唯一样子并顺便判无解。\(K \leftarrow N - M + 1\)

如果 \(K < N - M + 1\)\([K + M - 1, N)\) 这些数是用不到的。\(N \leftarrow K + M - 1\) 并离散化。判无解就是后 \(M - 1\) 个数必须是前 \(N\) 个里最大的。

此时 \(K + M - 1 = N\)。从后往前倒着做从当前滑动窗口扔数。对于 \(i \in [1, K)\),如果 \(B[i]\) 是前缀最大值,意味着 \(B[i + M]\) 可以扔 \(M\) 个数中任一个,否则只能扔最小值。 然后最后前 \(M\) 个数顺序随意乘以 \(M!\)

转化数组部分细节比较多。

WA 两发:

7 3 5
1 2 5 4 3 6 7

误认为当前第 \(M - 1\) 大值为 \(X\) 的时候只有 \(B[i] = X - 1\) 才能丢 \(M\) 个数中任一个。这个想法参考的规律是不优美不闭合不正确的。

posted @ 2022-10-03 19:21  Pizza1123  阅读(84)  评论(0)    收藏  举报