Блог пользователя elizabeth_zou_fanboi

Автор elizabeth_zou_fanboi, история, 2 недели назад, По-английски

a permutation is valid only if |ai — i| != k for all 1<=i<=n. Count the number of valid permutations.

Constraints: 2 ≤ N ≤ 2000

1 ≤ K ≤ N − 1

EDIT: Thanks for the explanation from methanol.

I implemented that explanation:

cpp code
  • Проголосовать: нравится
  • +17
  • Проголосовать: не нравится

»
2 недели назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by elizabeth_zou_fanboi (previous revision, new revision, compare).

»
2 недели назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

"how many satisfy |a_i − i| ≠ K"

Could you clarify please?

»
2 недели назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится

I have a solution with inclusion-exclusion.

For some permutation $$$p$$$, let $$$x$$$ be the number of indices $$$i$$$ with $$$|p_i - i| = k$$$.

Let $$$f(i)$$$ be the sum over all permutations of $$$x \choose i$$$. The answer is $$$\sum_{i=0}^{n} (-1)^i f(i)$$$.

To compute $$$f(i)$$$, you can count the number of ways to choose a subset of indices of size $$$i$$$, and assign $$$p_i$$$ values to it such that all indices $$$i$$$ in the subset satisfy $$$|p_i - i| = k$$$, and multiply that by $$$(n - i)!$$$. You can compute a dp for each residue class modulo $$$k$$$, and then merge the answers of each residue class.

Is there a more simple solution?

»
13 дней назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by elizabeth_zou_fanboi (previous revision, new revision, compare).